Files
cppdraft_translate/cppdraft/time/point.md
2025-10-25 03:02:53 +03:00

404 lines
13 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[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 {template<class Clock, class Duration = typename Clock::duration>class 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.2Constructors"), constructconstexpr time_point(); // has value epochconstexpr explicit time_point(const duration& d); // same as time_point() + dtemplate<class Duration2>constexpr time_point(const time_point<clock, Duration2>& t); // [[time.point.observer]](#observer "30.6.3Observer"), observerconstexpr duration time_since_epoch() const; // [[time.point.arithmetic]](#arithmetic "30.6.4Arithmetic"), 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.5Special 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<class Duration2>
constexpr time_point(const time_point<clock, Duration2>& t);
`
[3](#cons-3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2290)
*Constraints*: is_convertible_v<Duration2, duration> 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<class Clock, class Duration1, class Rep2, class Period2>
constexpr time_point<Clock, common_type_t<Duration1, duration<Rep2, Period2>>>
operator+(const time_point<Clock, Duration1>& lhs, const duration<Rep2, Period2>& 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<class Rep1, class Period1, class Clock, class Duration2>
constexpr time_point<Clock, common_type_t<duration<Rep1, Period1>, Duration2>>
operator+(const duration<Rep1, Period1>& lhs, const time_point<Clock, Duration2>& 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<class Clock, class Duration1, class Rep2, class Period2>
constexpr time_point<Clock, common_type_t<Duration1, duration<Rep2, Period2>>>
operator-(const time_point<Clock, Duration1>& lhs, const duration<Rep2, Period2>& 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<class Clock, class Duration1, class Duration2>
constexpr common_type_t<Duration1, Duration2>
operator-(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& 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<class Clock, class Duration1, class Duration2>
constexpr bool operator==(const time_point<Clock, Duration1>& lhs,
const time_point<Clock, Duration2>& 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<class Clock, class Duration1, class Duration2>
constexpr bool operator<(const time_point<Clock, Duration1>& lhs,
const time_point<Clock, Duration2>& 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<class Clock, class Duration1, class Duration2>
constexpr bool operator>(const time_point<Clock, Duration1>& lhs,
const time_point<Clock, Duration2>& 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<class Clock, class Duration1, class Duration2>
constexpr bool operator<=(const time_point<Clock, Duration1>& lhs,
const time_point<Clock, Duration2>& 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<class Clock, class Duration1, class Duration2>
constexpr bool operator>=(const time_point<Clock, Duration1>& lhs,
const time_point<Clock, Duration2>& 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<class Clock, class Duration1,
[three_way_comparable_with](cmp.concept#concept:three_way_comparable_with "17.12.4Concept three_­way_­comparable[cmp.concept]")<Duration1> Duration2>
constexpr auto operator<=>(const time_point<Clock, Duration1>& lhs,
const time_point<Clock, Duration2>& 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<class ToDuration, class Clock, class Duration>
constexpr time_point<Clock, ToDuration> time_point_cast(const time_point<Clock, Duration>& 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<Clock, ToDuration>(duration_cast<ToDuration>(t.time_since_epoch()))
[🔗](#lib:floor,time_point)
`template<class ToDuration, class Clock, class Duration>
constexpr time_point<Clock, ToDuration> floor(const time_point<Clock, Duration>& 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<Clock, ToDuration>(floor<ToDuration>(tp.time_since_epoch()))[.](#cast-4.sentence-1)
[🔗](#lib:ceil,time_point)
`template<class ToDuration, class Clock, class Duration>
constexpr time_point<Clock, ToDuration> ceil(const time_point<Clock, Duration>& 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<Clock, ToDuration>(ceil<ToDuration>(tp.time_since_epoch()))[.](#cast-6.sentence-1)
[🔗](#lib:round,time_point)
`template<class ToDuration, class Clock, class Duration>
constexpr time_point<Clock, ToDuration> round(const time_point<Clock, Duration>& 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<typename ToDuration::rep> is false[.](#cast-7.sentence-1)
[8](#cast-8)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2624)
*Returns*: time_point<Clock, ToDuration>(round<ToDuration>(tp.time_since_epoch()))[.](#cast-8.sentence-1)