[time.zone.leap] (original) (raw)

30 Time library [time]

30.11 Time zones [time.zone]

30.11.8 Class leap_second [time.zone.leap]

30.11.8.1 Overview [time.zone.leap.overview]

namespace std::chrono { class leap_second { public: leap_second(const leap_second&) = default; leap_second& operator=(const leap_second&) = default;constexpr sys_seconds date() const noexcept;constexpr seconds value() const noexcept;};}

Objects of type leap_second representing the date and value of the leap second insertions are constructed and stored in the time zone database when initialized.

[Example 1: for (auto& l : get_tzdb().leap_seconds) if (l <= sys_days{2018y/March/17d}) cout << l.date() << ": " << l.value() << '\n';

Produces the output:

1972-07-01 00:00:00: 1s 1973-01-01 00:00:00: 1s 1974-01-01 00:00:00: 1s 1975-01-01 00:00:00: 1s 1976-01-01 00:00:00: 1s 1977-01-01 00:00:00: 1s 1978-01-01 00:00:00: 1s 1979-01-01 00:00:00: 1s 1980-01-01 00:00:00: 1s 1981-07-01 00:00:00: 1s 1982-07-01 00:00:00: 1s 1983-07-01 00:00:00: 1s 1985-07-01 00:00:00: 1s 1988-01-01 00:00:00: 1s 1990-01-01 00:00:00: 1s 1991-01-01 00:00:00: 1s 1992-07-01 00:00:00: 1s 1993-07-01 00:00:00: 1s 1994-07-01 00:00:00: 1s 1996-01-01 00:00:00: 1s 1997-07-01 00:00:00: 1s 1999-01-01 00:00:00: 1s 2006-01-01 00:00:00: 1s 2009-01-01 00:00:00: 1s 2012-07-01 00:00:00: 1s 2015-07-01 00:00:00: 1s 2017-01-01 00:00:00: 1s

— _end example_]

30.11.8.2 Member functions [time.zone.leap.members]

constexpr sys_seconds date() const noexcept;

Returns: The date and time at which the leap second was inserted.

constexpr seconds value() const noexcept;

Returns: +1s to indicate a positive leap second or-1s to indicate a negative leap second.

[Note 1:

All leap seconds inserted up through 2022 were positive leap seconds.

— _end note_]

30.11.8.3 Non-member functions [time.zone.leap.nonmembers]

constexpr bool operator==(const leap_second& x, const leap_second& y) noexcept;

Returns: x.date() == y.date().

constexpr strong_ordering operator<=>(const leap_second& x, const leap_second& y) noexcept;

Returns: x.date() <=> y.date().

template<class Duration> constexpr bool operator==(const leap_second& x, const sys_time<Duration>& y) noexcept;

template<class Duration> constexpr bool operator<(const leap_second& x, const sys_time<Duration>& y) noexcept;

template<class Duration> constexpr bool operator<(const sys_time<Duration>& x, const leap_second& y) noexcept;

template<class Duration> constexpr bool operator>(const leap_second& x, const sys_time<Duration>& y) noexcept;

template<class Duration> constexpr bool operator>(const sys_time<Duration>& x, const leap_second& y) noexcept;

template<class Duration> constexpr bool operator<=(const leap_second& x, const sys_time<Duration>& y) noexcept;

template<class Duration> constexpr bool operator<=(const sys_time<Duration>& x, const leap_second& y) noexcept;

template<class Duration> constexpr bool operator>=(const leap_second& x, const sys_time<Duration>& y) noexcept;

template<class Duration> constexpr bool operator>=(const sys_time<Duration>& x, const leap_second& y) noexcept;

template<class Duration> requires [three_way_comparable_with](cmp.concept#concept:three%5Fway%5Fcomparable%5Fwith "17.12.4 Concept three_­way_­comparable [cmp.concept]")<sys_seconds, sys_time<Duration>> constexpr auto operator<=>(const leap_second& x, const sys_time<Duration>& y) noexcept;