[time.point] # 30 Time library [[time]](./#time) ## 30.6 Class template time_point [time.point] ### [30.6.1](#general) General [[time.point.general]](time.point.general) [🔗](#lib:time_point) namespace std::chrono {templateclass time_point {public:using clock = Clock; using duration = Duration; using rep = typename duration::rep; using period = typename duration::period; private: duration d_; // *exposition only*public:// [[time.point.cons]](#cons "30.6.2 Constructors"), constructconstexpr time_point(); // has value epochconstexpr explicit time_point(const duration& d); // same as time_point() + dtemplateconstexpr time_point(const time_point& t); // [[time.point.observer]](#observer "30.6.3 Observer"), observerconstexpr duration time_since_epoch() const; // [[time.point.arithmetic]](#arithmetic "30.6.4 Arithmetic"), arithmeticconstexpr time_point& operator++(); constexpr time_point operator++(int); constexpr time_point& operator--(); constexpr time_point operator--(int); constexpr time_point& operator+=(const duration& d); constexpr time_point& operator-=(const duration& d); // [[time.point.special]](#special "30.6.5 Special values"), special valuesstatic constexpr time_point min() noexcept; static constexpr time_point max() noexcept; };} [1](#general-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2253) If Duration is not a specialization of duration, the program is ill-formed[.](#general-1.sentence-1) ### [30.6.2](#cons) Constructors [[time.point.cons]](time.point.cons) [🔗](#lib:time_point,constructor) `constexpr time_point(); ` [1](#cons-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2265) *Effects*: Initializes d_ with duration​::​zero()[.](#cons-1.sentence-1) Such a time_point object represents the epoch[.](#cons-1.sentence-2) [🔗](#lib:time_point,constructor_) `constexpr explicit time_point(const duration& d); ` [2](#cons-2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2277) *Effects*: Initializes d_ with d[.](#cons-2.sentence-1) Such a time_point object represents the epoch + d[.](#cons-2.sentence-2) [🔗](#lib:time_point,constructor__) `template constexpr time_point(const time_point& t); ` [3](#cons-3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2290) *Constraints*: is_convertible_v is true[.](#cons-3.sentence-1) [4](#cons-4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2294) *Effects*: Initializes d_ with t.time_since_epoch()[.](#cons-4.sentence-1) ### [30.6.3](#observer) Observer [[time.point.observer]](time.point.observer) [🔗](#lib:time_since_epoch,time_point) `constexpr duration time_since_epoch() const; ` [1](#observer-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2307) *Returns*: d_[.](#observer-1.sentence-1) ### [30.6.4](#arithmetic) Arithmetic [[time.point.arithmetic]](time.point.arithmetic) [🔗](#lib:operator++,time_point) `constexpr time_point& operator++(); ` [1](#arithmetic-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2320) *Effects*: Equivalent to: ++d_[.](#arithmetic-1.sentence-1) [2](#arithmetic-2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2324) *Returns*: *this[.](#arithmetic-2.sentence-1) [🔗](#lib:operator++,time_point_) `constexpr time_point operator++(int); ` [3](#arithmetic-3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2335) *Effects*: Equivalent to: return time_point{d_++}; [🔗](#lib:operator--,time_point) `constexpr time_point& operator--(); ` [4](#arithmetic-4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2346) *Effects*: Equivalent to: --d_[.](#arithmetic-4.sentence-1) [5](#arithmetic-5) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2350) *Returns*: *this[.](#arithmetic-5.sentence-1) [🔗](#lib:operator--,time_point_) `constexpr time_point operator--(int); ` [6](#arithmetic-6) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2361) *Effects*: Equivalent to: return time_point{d_--}; [🔗](#lib:operator+=,time_point) `constexpr time_point& operator+=(const duration& d); ` [7](#arithmetic-7) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2372) *Effects*: Equivalent to: d_ += d[.](#arithmetic-7.sentence-1) [8](#arithmetic-8) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2376) *Returns*: *this[.](#arithmetic-8.sentence-1) [🔗](#lib:operator-=,time_point) `constexpr time_point& operator-=(const duration& d); ` [9](#arithmetic-9) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2387) *Effects*: Equivalent to: d_ -= d[.](#arithmetic-9.sentence-1) [10](#arithmetic-10) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2391) *Returns*: *this[.](#arithmetic-10.sentence-1) ### [30.6.5](#special) Special values [[time.point.special]](time.point.special) [🔗](#lib:min,time_point) `static constexpr time_point min() noexcept; ` [1](#special-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2404) *Returns*: time_point(duration​::​min())[.](#special-1.sentence-1) [🔗](#lib:max,time_point) `static constexpr time_point max() noexcept; ` [2](#special-2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2415) *Returns*: time_point(duration​::​max())[.](#special-2.sentence-1) ### [30.6.6](#nonmember) Non-member arithmetic [[time.point.nonmember]](time.point.nonmember) [🔗](#lib:operator+,time_point) `template constexpr time_point>> operator+(const time_point& lhs, const duration& rhs); ` [1](#nonmember-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2431) *Returns*: CT(lhs.time_since_epoch() + rhs), where CT is the type of the return value[.](#nonmember-1.sentence-1) [🔗](#lib:operator+,time_point_) `template constexpr time_point, Duration2>> operator+(const duration& lhs, const time_point& rhs); ` [2](#nonmember-2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2445) *Returns*: rhs + lhs[.](#nonmember-2.sentence-1) [🔗](#lib:operator-,time_point) `template constexpr time_point>> operator-(const time_point& lhs, const duration& rhs); ` [3](#nonmember-3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2459) *Returns*: CT(lhs.time_since_epoch() - rhs), where CT is the type of the return value[.](#nonmember-3.sentence-1) [🔗](#lib:operator-,time_point_) `template constexpr common_type_t operator-(const time_point& lhs, const time_point& rhs); ` [4](#nonmember-4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2473) *Returns*: lhs.time_since_epoch() - rhs.time_since_epoch()[.](#nonmember-4.sentence-1) ### [30.6.7](#comparisons) Comparisons [[time.point.comparisons]](time.point.comparisons) [🔗](#lib:operator==,time_point) `template constexpr bool operator==(const time_point& lhs, const time_point& rhs); ` [1](#comparisons-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2488) *Returns*: lhs.time_since_epoch() == rhs.time_since_epoch()[.](#comparisons-1.sentence-1) [🔗](#lib:operator%3c,time_point) `template constexpr bool operator<(const time_point& lhs, const time_point& rhs); ` [2](#comparisons-2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2501) *Returns*: lhs.time_since_epoch() < rhs.time_since_epoch()[.](#comparisons-2.sentence-1) [🔗](#lib:operator%3e,time_point) `template constexpr bool operator>(const time_point& lhs, const time_point& rhs); ` [3](#comparisons-3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2514) *Returns*: rhs < lhs[.](#comparisons-3.sentence-1) [🔗](#lib:operator%3c=,time_point) `template constexpr bool operator<=(const time_point& lhs, const time_point& rhs); ` [4](#comparisons-4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2527) *Returns*: !(rhs < lhs)[.](#comparisons-4.sentence-1) [🔗](#lib:operator%3e=,time_point) `template constexpr bool operator>=(const time_point& lhs, const time_point& rhs); ` [5](#comparisons-5) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2540) *Returns*: !(lhs < rhs)[.](#comparisons-5.sentence-1) [🔗](#lib:operator%3e=,time_point_) `template Duration2> constexpr auto operator<=>(const time_point& lhs, const time_point& rhs); ` [6](#comparisons-6) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2554) *Returns*: lhs.time_since_epoch() <=> rhs.time_since_epoch()[.](#comparisons-6.sentence-1) ### [30.6.8](#cast) Conversions [[time.point.cast]](time.point.cast) [🔗](#lib:time_point,time_point_cast) `template constexpr time_point time_point_cast(const time_point& t); ` [1](#cast-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2569) *Constraints*: ToDuration is a specialization of duration[.](#cast-1.sentence-1) [2](#cast-2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2573) *Returns*: time_point(duration_cast(t.time_since_epoch())) [🔗](#lib:floor,time_point) `template constexpr time_point floor(const time_point& tp); ` [3](#cast-3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2587) *Constraints*: ToDuration is a specialization of duration[.](#cast-3.sentence-1) [4](#cast-4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2591) *Returns*: time_point(floor(tp.time_since_epoch()))[.](#cast-4.sentence-1) [🔗](#lib:ceil,time_point) `template constexpr time_point ceil(const time_point& tp); ` [5](#cast-5) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2603) *Constraints*: ToDuration is a specialization of duration[.](#cast-5.sentence-1) [6](#cast-6) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2607) *Returns*: time_point(ceil(tp.time_since_epoch()))[.](#cast-6.sentence-1) [🔗](#lib:round,time_point) `template constexpr time_point round(const time_point& tp); ` [7](#cast-7) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2619) *Constraints*: ToDuration is a specialization of duration, andtreat_as_floating_point_v is false[.](#cast-7.sentence-1) [8](#cast-8) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2624) *Returns*: time_point(round(tp.time_since_epoch()))[.](#cast-8.sentence-1)