# 标准库头文件 此头文件是[日期和时间](https://zh.cppreference.com/w/cpp/chrono)库的一部分。 ### 类 | 定义于命名空间 `std::chrono` | | | ------------------------------------------------------------ | ------------------------------------------------------------ | | [ duration](https://zh.cppreference.com/w/cpp/chrono/duration)(C++11) | 时间区间 (类模板) | | [ system_clock](https://zh.cppreference.com/w/cpp/chrono/system_clock)(C++11) | 来自系统范畴实时时钟的挂钟时间 (类) | | [ steady_clock](https://zh.cppreference.com/w/cpp/chrono/steady_clock)(C++11) | 决不会调整的单调时钟 (类) | | [ high_resolution_clock](https://zh.cppreference.com/w/cpp/chrono/high_resolution_clock)(C++11) | 拥有可用的最短嘀嗒周期的时钟 (类) | | [ time_point](https://zh.cppreference.com/w/cpp/chrono/time_point)(C++11) | 时间中的点 (类模板) | | [ treat_as_floating_point](https://zh.cppreference.com/w/cpp/chrono/treat_as_floating_point) | 指示时长可转换为拥有不同嘀嗒周期的时长 (类模板) | | [ duration_values](https://zh.cppreference.com/w/cpp/chrono/duration_values) | 构造给定类型的嘀嗒计数的零、最小及最大值 (类模板) | | 便利 typedef | | | 定义于命名空间 `std::chrono` | | | [std::chrono::nanoseconds](https://zh.cppreference.com/w/cpp/chrono/duration) | Period 为 [std::nano](https://zh.cppreference.com/w/cpp/numeric/ratio/ratio) 的时长类型 | | [std::chrono::microseconds](https://zh.cppreference.com/w/cpp/chrono/duration) | Period 为 [std::micro](https://zh.cppreference.com/w/cpp/numeric/ratio/ratio) 的时长类型 | | [std::chrono::milliseconds](https://zh.cppreference.com/w/cpp/chrono/duration) | Period 为 [std::milli](https://zh.cppreference.com/w/cpp/numeric/ratio/ratio) 的时长类型 | | [std::chrono::seconds](https://zh.cppreference.com/w/cpp/chrono/duration) | Period 为 [std::ratio](http://zh.cppreference.com/w/cpp/numeric/ratio/ratio)<1> 的时长类型 | | [std::chrono::minutes](https://zh.cppreference.com/w/cpp/chrono/duration) | Period 为 [std::ratio](http://zh.cppreference.com/w/cpp/numeric/ratio/ratio)<60> 的时长类型 | | [std::chrono::hours](https://zh.cppreference.com/w/cpp/chrono/duration) | Period 为 [std::ratio](http://zh.cppreference.com/w/cpp/numeric/ratio/ratio)<3600> 的时长类型 | | 特化 | | | 定义于命名空间 `std` | | | [ std::common_type](https://zh.cppreference.com/w/cpp/chrono/duration/common_type) | 特化 [std::common_type](https://zh.cppreference.com/w/cpp/types/common_type) 特征 (类模板特化) | | [ std::common_type](https://zh.cppreference.com/w/cpp/chrono/time_point/common_type) | 特化 [std::common_type](https://zh.cppreference.com/w/cpp/types/common_type) 特征 (类模板特化) | ### 函数 | duration | | | ------------------------------------------------------------ | ------------------------------------------------------------ | | 定义于命名空间 `std::chrono` | | | [ operator+operator-operator*operator/operator%](https://zh.cppreference.com/w/cpp/chrono/duration/operator_arith4) | 实现以时长为实参的算术运算 (函数模板) | | [ operator==operator!=operatoroperator>=](https://zh.cppreference.com/w/cpp/chrono/duration/operator_cmp) | 比较两个时长 (函数模板) | | [ duration_cast](https://zh.cppreference.com/w/cpp/chrono/duration/duration_cast) | 转换时长到另一个拥有不同嘀嗒间隔的时长 (函数模板) | | [ floor(std::chrono::duration)](https://zh.cppreference.com/w/cpp/chrono/duration/floor)(C++17) | 以向下取整的方式,将一个时长转换为另一个时长 (函数模板) | | [ ceil(std::chrono::duration)](https://zh.cppreference.com/w/cpp/chrono/duration/ceil)(C++17) | 以向上取整的方式,将一个时长转换为另一个时长 (函数模板) | | [ round(std::chrono::duration)](https://zh.cppreference.com/w/cpp/chrono/duration/round)(C++17) | 转换时长到另一个时长,就近取整,偶数优先 (函数模板) | | [ abs(std::chrono::duration)](https://zh.cppreference.com/w/cpp/chrono/duration/abs)(C++17) | 获取时长的绝对值 (函数模板) | | time_point | | | 定义于命名空间 `std::chrono` | | | [ operator+operator-](https://zh.cppreference.com/w/cpp/chrono/time_point/operator_arith2) | 实施涉及时间点的加法和减法运算 (函数模板) | | [ operator==operator!=operatoroperator>=](https://zh.cppreference.com/w/cpp/chrono/time_point/operator_cmp) | 比较两个时间点 (函数模板) | | [ time_point_cast](https://zh.cppreference.com/w/cpp/chrono/time_point/time_point_cast) | 转换时间点为同一时钟上拥有不同时长的另一时间点 (函数模板) | | [ floor(std::chrono::time_point)](https://zh.cppreference.com/w/cpp/chrono/time_point/floor)(C++17) | 转换 time_point 到另一个,向下取整 (函数模板) | | [ ceil(std::chrono::time_point)](https://zh.cppreference.com/w/cpp/chrono/time_point/ceil)(C++17) | 转换 time_point 到另一个,向上取整 (函数模板) | | [ round(std::chrono::time_point)](https://zh.cppreference.com/w/cpp/chrono/time_point/round)(C++17) | 转换 time_point 到另一个,就近取整,偶数优先 (函数模板) | | 字面量 | | | 定义于内联命名空间 `std::literals::chrono_literals` | | | [ operator""h](https://zh.cppreference.com/w/cpp/chrono/operator""h)(C++14) | 表示小时的 [std::chrono::duration](https://zh.cppreference.com/w/cpp/chrono/duration) 字面量 (函数) | | [ operator""min](https://zh.cppreference.com/w/cpp/chrono/operator""min)(C++14) | 表示分钟的 [std::chrono::duration](https://zh.cppreference.com/w/cpp/chrono/duration) 字面量 (函数) | | [ operator""s](https://zh.cppreference.com/w/cpp/chrono/operator""s)(C++14) | 表示秒的 [std::chrono::duration](https://zh.cppreference.com/w/cpp/chrono/duration) 字面量 (函数) | | [ operator""ms](https://zh.cppreference.com/w/cpp/chrono/operator""ms)(C++14) | 表示毫秒的 [std::chrono::duration](https://zh.cppreference.com/w/cpp/chrono/duration) 字面量 (函数) | | [ operator""us](https://zh.cppreference.com/w/cpp/chrono/operator""us)(C++14) | 表示微秒的 [std::chrono::duration](https://zh.cppreference.com/w/cpp/chrono/duration) 字面量 (函数) | | [ operator""ns](https://zh.cppreference.com/w/cpp/chrono/operator""ns)(C++14) | 表示纳秒的 [std::chrono::duration](https://zh.cppreference.com/w/cpp/chrono/duration) 字面量 (函数) | ### 概要 ```c++ namespace std { namespace chrono { // 类模板 duration template > class duration; // 类模板 time_point template class time_point; } // common_type 特化 template struct common_type, chrono::duration>; template struct common_type, chrono::time_point>; namespace chrono { // 定制的特征 template struct treat_as_floating_point; template struct duration_values; template constexpr bool treat_as_floating_point_v = treat_as_floating_point::value; // duration 算术 template common_type_t, duration> constexpr operator+(const duration& lhs, const duration& rhs); template common_type_t, duration> constexpr operator-(const duration& lhs, const duration& rhs); template duration, Period> constexpr operator*(const duration& d, const Rep2& s); template duration, Period> constexpr operator*(const Rep1& s, const duration& d); template duration, Period> constexpr operator/(const duration& d, const Rep2& s); template common_type_t constexpr operator/(const duration& lhs, const duration& rhs); template duration, Period> constexpr operator%(const duration& d, const Rep2& s); template common_type_t, duration> constexpr operator%(const duration& lhs, const duration& rhs); // duration 比较 template constexpr bool operator==(const duration& lhs, const duration& rhs); template constexpr bool operator!=(const duration& lhs, const duration& rhs); template constexpr bool operator< (const duration& lhs, const duration& rhs); template constexpr bool operator<=(const duration& lhs, const duration& rhs); template constexpr bool operator> (const duration& lhs, const duration& rhs); template constexpr bool operator>=(const duration& lhs, const duration& rhs); // duration_cast template constexpr ToDuration duration_cast(const duration& d); template constexpr ToDuration floor(const duration& d); template constexpr ToDuration ceil(const duration& d); template constexpr ToDuration round(const duration& d); // 便利 typedef using nanoseconds = duration; using microseconds = duration; using milliseconds = duration; using seconds = duration; using minutes = duration>; using hours = duration>; // time_point 算术 template constexpr time_point>> operator+(const time_point& lhs, const duration& rhs); template constexpr time_point, Duration2>> operator+(const duration& lhs, const time_point& rhs); template constexpr time_point>> operator-(const time_point& lhs, const duration& rhs); template constexpr common_type_t operator-(const time_point& lhs, const time_point& rhs); // time_point 比较 template constexpr bool operator==(const time_point& lhs, const time_point& rhs); template constexpr bool operator!=(const time_point& lhs, const time_point& rhs); template constexpr bool operator< (const time_point& lhs, const time_point& rhs); template constexpr bool operator<=(const time_point& lhs, const time_point& rhs); template constexpr bool operator> (const time_point& lhs, const time_point& rhs); template constexpr bool operator>=(const time_point& lhs, const time_point& rhs); // time_point_cast template constexpr time_point time_point_cast(const time_point& t); template constexpr time_point floor(const time_point& tp); template constexpr time_point ceil(const time_point& tp); template constexpr time_point round(const time_point& tp); // 特化的算法 template constexpr duration abs(duration d); // 时钟 class system_clock; class steady_clock; class high_resolution_clock; } inline namespace literals { inline namespace chrono_literals { // duration 字面量后缀 constexpr chrono::hours operator "" h(unsigned long long); constexpr chrono::duration> operator "" h(long double); constexpr chrono::minutes operator "" min(unsigned long long); constexpr chrono::duration> operator "" min(long double); constexpr chrono::seconds operator "" s(unsigned long long); constexpr chrono::duration operator "" s(long double); constexpr chrono::milliseconds operator "" ms(unsigned long long); constexpr chrono::duration operator "" ms(long double); constexpr chrono::microseconds operator "" us(unsigned long long); constexpr chrono::duration operator "" us(long double); constexpr chrono::nanoseconds operator "" ns(unsigned long long); constexpr chrono::duration operator "" ns(long double); } } namespace chrono { using namespace literals::chrono_literals; } ``` #### [std::chrono::treat_as_floating_point](http://zh.cppreference.com/w/cpp/chrono/treat_as_floating_point) ```c++ template struct treat_as_floating_point : is_floating_point { }; ``` #### [std::chrono::duration_values](http://zh.cppreference.com/w/cpp/chrono/duration_values) ```c++ template struct duration_values { public: static constexpr Rep zero(); static constexpr Rep min(); static constexpr Rep max(); }; ``` #### [std::chrono::duration](http://zh.cppreference.com/w/cpp/chrono/duration) ```c++ template > class duration { public: using rep = Rep; using period = Period; private: rep rep_; // 仅用于阐释 public: // 构造/复制/销毁 constexpr duration() = default; template constexpr explicit duration(const Rep2& r); template constexpr duration(const duration& d); ~duration() = default; duration(const duration&) = default; duration& operator=(const duration&) = default; // 探察函数 constexpr rep count() const; // 算术 constexpr duration operator+() const; constexpr duration operator-() const; constexpr duration& operator++(); constexpr duration operator++(int); constexpr duration& operator--(); constexpr duration operator--(int); constexpr duration& operator+=(const duration& d); constexpr duration& operator-=(const duration& d); constexpr duration& operator*=(const rep& rhs); constexpr duration& operator/=(const rep& rhs); constexpr duration& operator%=(const rep& rhs); constexpr duration& operator%=(const duration& rhs); // 特殊值 static constexpr duration zero(); static constexpr duration min(); static constexpr duration max(); }; ``` #### [std::chrono::time_point](http://zh.cppreference.com/w/cpp/chrono/time_point) ```c++ template class time_point { public: using clock = Clock; using duration = Duration; using rep = typename duration::rep; using period = typename duration::period; private: duration d_; // 仅用于阐释 public: // 构造 constexpr time_point(); // 拥有纪元值 constexpr explicit time_point(const duration& d); // 同 time_point() + d template constexpr time_point(const time_point& t); // 探察函数 constexpr duration time_since_epoch() const; // 算术 constexpr time_point& operator+=(const duration& d); constexpr time_point& operator-=(const duration& d); // 特殊值 static constexpr time_point min(); static constexpr time_point max(); }; ``` #### [std::chrono::system_clock](http://zh.cppreference.com/w/cpp/chrono/system_clock) ```c++ class system_clock { public: using rep = /* 见说明 */ ; using period = ratio; using duration = chrono::duration; using time_point = chrono::time_point; static constexpr bool is_steady = /* 未指明 */ ; static time_point now() noexcept; // 映射到 C API static time_t to_time_t (const time_point& t) noexcept; static time_point from_time_t(time_t t) noexcept; }; ``` #### [std::chrono::steady_clock](http://zh.cppreference.com/w/cpp/chrono/steady_clock) ```c++ class steady_clock { public: using rep = /* 未指明 */ ; using period = ratio; using duration = chrono::duration; using time_point = chrono::time_point; static constexpr bool is_steady = true; static time_point now() noexcept; }; ``` #### [std::chrono::high_resolution_clock](http://zh.cppreference.com/w/cpp/chrono/high_resolution_clock) ```c++ class high_resolution_clock { public: using rep = /* 未指明 */ ; using period = ratio; using duration = chrono::duration; using time_point = chrono::time_point; static constexpr bool is_steady = /* 未指明 */ ; static time_point now() noexcept; }; ```