<chrono>
函数
abs(duration)
如果 d >= d.zero()
,则返回 d
;否则返回 -d
。
语法
template <class Rep, class Period>
constexpr duration<Rep, Period> abs(duration<Rep, Period> d ); // C++17
参数
Rep
源duration
d
的内部表示形式的类型。
Period
一种 std::ratio
类型,表示每秒与源 Rep
类型的比率(即每 Rep
的秒数)。
d
源 duration
对象。
返回值
d
的绝对值。
示例: abs(duration)
// compile using: /std:c++latest
#include <chrono>
#include <iostream>
int main()
{
std::cout << abs(-24h);
return 0;
}
24h
ceil(duration)
返回目标类型中大于或等于指定 duration
的最小可表示 duration
。
语法
template<class ToDuration, class Rep, class Period>
constexpr ToDuration
ceil(const duration<Rep, Period>& d); // C++17
参数
ToDuration
目标 duration
类型。 约束为 duration
的专用化。
Rep
源duration
d
的内部表示形式的类型。
Period
一种 std::ratio
类型,表示每秒与源 Rep
类型的比率(即每 Rep
的秒数)。
d
源 duration
对象。
返回值
返回 ToDuration
中可表示的大于或等于参数 d
的最小 duration
。
备注
除非 ToDuration
类型是 duration
的实例,否则 ceil
不会参与重载解析。
ceil(time_point)
返回目标 duration
中可表示的大于或等于指定时间点的最小时间点。
语法
template<class ToDuration, class Clock, class Duration>
constexpr time_point<Clock, ToDuration>
ceil(const time_point<Clock, Duration>& t); // C++17
参数
ToDuration
目标 duration
类型。 约束为 duration
的专用化。
Clock
结果和源参数 tp
的常见时钟类型。
Duration
tp
的 duration
类型。
tp
源 time_point
对象。
返回值
返回可使用 ToDuration
表示的大于或等于 tp
的最小时间点。 实际上是 time_point<Clock, ToDuration>(ceil<ToDuration>(tp.time_since_epoch()));
。
注解
除非 ToDuration
类型是 duration
的实例,否则 ceil
不会参与重载解析。
clock_cast
将一个时钟的 time_point
转换为另一个时钟的等效 time_point
。
语法
template <class DestClock, class SourceClock, class Duration>
auto clock_cast(const time_point<SourceClock, Duration>& t); // C++20
参数
DestClock
要将 time_point
转换为的时钟类型。
Duration
SourceClock
的 duration
,或者由你来指定。
SourceClock
要转换的 time_point
所基于的时钟类型。
t
要转换的 time_point
。
返回值
time_point
等效于 t
,但特定于 DestClock
。
备注
如果未显式传递参数 SourceClock
和 Duration
,可以通过类模板自变量推导来进行推断。 例如,如果 clock_cast<utc_clock>(file_clock::now())
,SourceClock
将推断为 file_clock
,Duration
将推断为 file_clock::duration
。
在以下格式标准的时钟转换列表中,选择了从 SourceClock
到 DestClock
的转换步骤最少的一个。
clock_time_conversion<DestClock, SourceClock>{}(t)
clock_time_conversion<DestClock, system_clock>{}(
clock_time_conversion<system_clock, SourceClock>{}(t))
clock_time_conversion<DestClock, utc_clock>{}(
clock_time_conversion<utc_clock, SourceClock>{}(t))
clock_time_conversion<DestClock, utc_clock>{}(
clock_time_conversion<utc_clock, system_clock>{}(
clock_time_conversion<system_clock, SourceClock>{}(t)))
clock_time_conversion<DestClock, system_clock>{}(
clock_time_conversion<system_clock, utc_clock>{}(
clock_time_conversion<utc_clock, SourceClock>{}(t)))
有关 clock_time_conversion
的作用的详细信息,请参阅 clock_time_conversion
结构。
示例 clock_cast
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
utc_clock::time_point t = clock_cast<utc_clock>(file_clock::now());
std::cout << t;
return 0;
}
2021-10-11 22:58:17.8540720
current_zone
获取当前时区对象。
语法
const time_zone* current_zone(); // C++20
返回值
返回一个指向 time_zone
的指针,就像调用 get_tzdb().current_zone()
的结果一样。 如果它是对时区数据库的第一个引用,并且无法初始化时区数据库,则会引发 runtime_error
异常。
duration_cast
将 duration
强制转换为指定的目标 duration
类型。
语法
template <class ToDuration, class Rep, class Period>
constexpr ToDuration
duration_cast(const duration<Rep, Period>& d); // C++11
参数
ToDuration
目标 duration
类型。 约束为 duration
的专用化。
Rep
源duration
d
的内部表示形式的类型。
Period
一种 std::ratio
类型,表示每秒与源 Rep
类型的比率(即每 Rep
的秒数)。
d
要强制转换为目标 duration
类型的源 duration
对象。
返回值
一个表示 ToDuration
. duration
d
类型的对象。 如有必要,它将被截断以适合目标类型。 如果源包含一个 NaN
、一个无穷大或者对于目标 duration
中的表示形式来说太大,则将浮点 duration
强制转换为整型 duration
的结果是不确定的。
备注
当源时间段正好能被目标时间段整除时,则无需使用 duration_cast
在 duration
类型之间转换,例如将分钟数转换为秒数。 此外,无需在浮点 duration
类型之间进行转换。 可以使用普通强制转换或 duration
构造函数执行这两种转换。
除非 ToDuration
是 duration
的实例,否则 duration_cast
不会参与重载解析。 它通过使用 static_cast
而不是隐式转换来执行所有转换。 如果可能,避免使用乘法和除法。 例如,当编译器知道目标时间段和源时间段的常见比率的分子或分母为 1 时。 计算是在可用的最宽类型中完成的,然后在完成后转换为结果类型,就像通过 static_cast
一样。
示例 duration_cast
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
seconds s(1);
std::cout << duration_cast<microseconds>(s) << '\n';
std::cout << duration_cast<nanoseconds>(s) << '\n';
return 0;
}
1000000us
1000000000ns
floor(duration)
返回目标类型中小于或等于指定 duration
的最大可表示 duration
。
语法
template<class ToDuration, class Rep, class Period>
constexpr ToDuration
floor(const duration<Rep, Period>& d); // C++17
参数
ToDuration
目标 duration
类型。 约束为 duration
的专用化。
Rep
源duration
d
的内部表示形式的类型。
Period
一种 std::ratio
类型,表示每秒与源 Rep
类型的比率(即每 Rep
的秒数)。
d
源 duration
对象。
返回值
返回 ToDuration
中可表示的小于或等于参数 d
的最大 duration
。
备注
除非 ToDuration
类型是 duration
的实例,否则 floor
不会参与重载解析。
floor(time_point)
返回目标 duration
中可表示的小于或等于指定时间点的最大时间点。
语法
template<class ToDuration, class Clock, class Duration>
constexpr time_point<Clock, ToDuration>
floor(const time_point<Clock, Duration>& tp); // C++17
参数
ToDuration
目标 duration
类型。 约束为 duration
的专用化。
Clock
结果和源参数 tp
的常见时钟类型。
Duration
tp
的 duration
类型。
tp
源 time_point
对象。
返回值
返回可使用 ToDuration
表示的小于或等于 tp
的最大时间点。 实际上是 time_point<Clock, ToDuration>(floor<ToDuration>(tp.time_since_epoch()));
。
注解
除非 ToDuration
类型是 duration
的实例,否则 floor
不会参与重载解析。
from_stream
使用指定格式将输入流分析为其中一个 std::chrono
时间或间隔类型,例如 day
、month
、month_day
、weekday
、year
、year_month
、year_month_day
等。
如果分析失败,将调用 is.setstate
(ios_base::failbit
),并且不会修改输出参数。
// 1) day - C++20
template<class charT class traits, class Alloc = allocator<charT>>
basic_istream<charT, traits>&
from_stream(
basic_istream<charT, traits>& is, const charT* fmt,
day& d, basic_string<charT, traits, Alloc>* abbrev = nullptr,
minutes* offset = nullptr);
// 2) duration - C++20
template<class charT, class traits, class Rep, class Period, class Alloc = allocator<charT>>
basic_istream<charT, traits>&
from_stream(
basic_istream<charT, traits>& is, const charT* fmt,
duration<Rep, Period>& dur, basic_string<charT, traits, Alloc>* abbrev = nullptr,
minutes* offset = nullptr);
// 3) file_time - C++20
template<class charT, class traits, class Duration, class Alloc = allocator<charT>>
basic_istream<charT, traits>&
from_stream(
basic_istream<charT, traits>& is, const charT* fmt,
file_time<Duration>& ft, basic_string<charT, traits, Alloc>* abbrev = nullptr,
minutes* offset = nullptr);
// 4) gps_time - C++20
template<class charT, class traits, class Duration, class Alloc = allocator<charT>>
basic_istream<charT, traits>&
from_stream(
basic_istream<charT, traits>& is, const charT* fmt,
gps_time<Duration>& gt, basic_string<charT, traits, Alloc>* abbrev = nullptr,
minutes* offset = nullptr);
// 5) local_time - C++20
template<class charT, class traits, class Duration, class Alloc = allocator<charT>>
basic_istream<charT, traits>&
from_stream(
basic_istream<charT, traits>& is, const charT* fmt,
local_time<Duration>& lt, basic_string<charT, traits, Alloc>* abbrev = nullptr,
minutes* offset = nullptr);
// 6) month - C++20
template<class charT, class traits, class Alloc = allocator<charT>>
basic_istream<charT, traits>&
from_stream(
basic_istream<charT, traits>& is, const charT* fmt,
month& m, basic_string<charT, traits, Alloc>* abbrev = nullptr,
minutes* offset = nullptr);
// 7) month_day - C++20
template<class charT, class traits, class Alloc = allocator<charT>>
basic_istream<charT, traits>&
from_stream(
basic_istream<charT, traits>& is, const charT* fmt,
month_day& md, basic_string<charT, traits, Alloc>* abbrev = nullptr,
minutes* offset = nullptr);
// 8) utc_time - C++20
template<class charT, class traits, class Duration, class Alloc = allocator<charT>>
basic_istream<charT, traits>&
from_stream(
basic_istream<charT, traits>& is, const charT* fmt,
utc_time<Duration>& ut, basic_string<charT, traits, Alloc>* abbrev = nullptr,
minutes* offset = nullptr);
// 9) sys_time - C++20
template<class charT, class traits, class Duration, class Alloc = allocator<charT>>
basic_istream<charT, traits>&
from_stream(
basic_istream<charT, traits>& is, const charT* fmt,
sys_time<Duration>& st, basic_string<charT, traits, Alloc>* abbrev = nullptr,
minutes* offset = nullptr);
// 10) tai_time - C++20
template<class charT, class traits, class Duration, class Alloc = allocator<charT>>
basic_istream<charT, traits>&
from_stream(
basic_istream<charT, traits>& is, const charT* fmt,
tai_time<Duration>& tt, basic_string<charT, traits, Alloc>* abbrev = nullptr,
minutes* offset = nullptr);
// 11) weekday - C++20
template<class charT, class traits, class Alloc = allocator<charT>>
basic_istream<charT, traits>&
from_stream(
basic_istream<charT, traits>& is, const charT* fmt,
weekday& wd, basic_string<charT, traits, Alloc>* abbrev = nullptr,
minutes* offset = nullptr);
// 12) year - C++20
template<class charT, class traits, class Alloc = allocator<charT>>
basic_istream<charT, traits>&
from_stream(
basic_istream<charT, traits>& is, const charT* fmt,
year& y, basic_string<charT, traits, Alloc>* abbrev = nullptr,
minutes* offset = nullptr);
// 13) year_month - C++20
template<class charT, class traits, class Alloc = allocator<charT>>
basic_istream<charT, traits>&
from_stream(
basic_istream<charT, traits>& is, const charT* fmt,
year_month& ym, basic_string<charT, traits, Alloc>* abbrev = nullptr,
minutes* offset = nullptr);
// 14) year_month_day - C++20
template<class charT, class traits, class Alloc = allocator<charT>>
basic_istream<charT, traits>&
from_stream(
basic_istream<charT, traits>& is, const charT* fmt,
year_month_day& ymd, basic_string<charT, traits, Alloc>* abbrev = nullptr,
minutes* offset = nullptr);
模板参数
Alloc
表示分配器对象的类型,该分配器处理字符串的内存分配和解除分配。
charT
要从流中读取和存储在字符串中的单个字符的数据类型。 C++ 标准库使用类型为 char
的元素的类型定义 string
、类型为 wchar_t
的元素的类型定义 wstring
、类型为 char16_t
的元素的类型定义 u16string
以及类型为 char32_t
的元素的类型定义 u32string
提供此类模板的专用化。
traits
描述 basic_string
和 basic_istream
专用化的 charT
属性。
Rep
duration
类型的内部表示形式类型。
Period
一种 std::ratio
类型,表示每秒与源 Rep
类型的比率(即每 Rep
的秒数)。
Duration
用于时间专用化的 duration
类型。
参数
abbrev
如果 abbrev
不是 nullptr
,已指定格式说明符 %Z
,并且分析成功,则 abbrev
包含所分析的值。
d
如果分析成功,则包含函数返回时所分析的一天。
dur
从流中分析的 duration
。
fmt
用于匹配输入的格式字符串。 有关分析格式设置选项的列表,请参阅分析格式字符串。
ft
从流中分析的 file_time
。
gt
从流中分析的 gps_time
。
is
要分析的输入流。
lt
从流中分析的 local_time
。
m
从流中分析的 month
。
md
从流中分析的 month_day
。
offset
如果 offset
不是 nullptr
,已指定格式说明符 %z
或修改的变体(如 %Ez
或%0z
),并且分析成功,则 offset
指向所分析的值。
st
从流中分析的 sys_time
。
tt
从流中分析的 tai_time
。
ut
从流中分析的 utc_time
。
wd
从流中分析的 weekday
。
y
从流中分析的 year
。
ym
从流中分析的 year_month
。
ymd
从流中分析的 year_month_day
。
返回值
输入流 is
示例: from_stream
// compile using: /std:c++latest
#include <chrono>
#include <iostream>
int main()
{
std::istringstream str{ "22" };
std::basic_istream<char> stream{ str.rdbuf() };
std::chrono::day d;
std::chrono::from_stream(stream, "%d", d);
std::cout << d << "\n";
return 0;
}
22
备注
7) 如果使用了 %Z
并已成功分析,该值将分配给 *abbrev
,前提是 abbrev
为非 null 值。 如果使用了 %z
(或修改的变体)并已成功分析,该值将分配给 *offset
,前提是 offset
为非 null 值。
12) 如果使用了 %Z
并已成功分析,该值将分配给 *abbrev
,前提是 abbrev
为非 null 值。 如果使用了 %z
(或修改的变体)并已成功分析,该值将分配给 *offset
,前提是 offset
为非 null 值。
from_stream
格式字符串
格式可以是以下字符串之一:
Date
说明符 | 说明 |
---|---|
%D |
等效于 %m/%d/%y |
%F N % F |
等效于 %Y-%m-%d 。 如果使用宽度 N 进行修改,则该宽度仅适用于 %Y 。 |
%x %Ex |
区域设置的日期表示形式。%Ex 分析区域设置的替代日期表示形式。1 |
日
说明符 | 说明 |
---|---|
%d %Od N % d %e %Oe N % e |
以十进制数字表示的一个月中的某一天。% Nd 指定要读取的最大字符数,例如 %1d 。 如果未指定 N,则默认值为 2。允许使用前导零,但不是必需的。 %Od (字母 O ,不是零)解释月份中的日期的区域设置替代表示形式。1 %e 等效于 %d 并且可以像 %d 那样进行修改。1 |
一周中的一天
说明符 | 说明 |
---|---|
%a %A |
区域设置的完整或缩写的不区分大小写的工作日名称。%A 等效于 %a |
%u N % u |
以十进制数字 (1-7) 表示的 ISO 工作日,其中星期一为 1。 % Nu 指定要读取的最大字符数,例如 %2u 。 如果未指定 N,则默认值为 1。 允许使用前导零,但不是必需的。 |
%w N % w %Ow |
以十进制数字 (0-6) 表示的工作日,其中星期日为 0。% Nw 指定要读取的最大字符数,例如 %2w 。 如果未指定 N,则默认值为 1。允许使用前导零,但不是必需的。 %Ow (字母 O ,不是零)解释了区域设置的替代表示形式。1 |
一年中的某一周/天
说明符 | 说明 |
---|---|
%j N % j |
如果正在设置格式的类型是持续时间的专用化,则为没有填充的十进制天数。 否则为以十进制数表示的一年中的某一天。 Jan 1 为 001 。 如果结果少于三位数,则从左侧用 0 (零)填充到三位数。% Nj 指定要读取的最大字符数,例如 %2j 。 如果未指定 N,则默认值为 3。 允许使用前导数字,但不是必需的。 |
%U N % U %OU |
以十进制数表示的一年中的周数。 一年的第一个星期日是第 01 周的第一天。 同一年该周之前的天数位于第 00 周。 如果结果是个位数,它的前缀是 0 (零)。% NU 指定要读取的最大字符数,例如 %2U 。 如果未指定 N,则默认值为 2。允许使用前导零,但不是必需的。 %OU (字母 O ,不是零)分析了区域设置的替代表示形式。1 |
%W N % W %OW |
以十进制数表示的一年中的周数。 一年的第一个星期一是第 01 周的第一天。 同一年该周之前的天数位于第 00 周。如果结果是个位数,它的前缀是 0 (零)。% NW 指定要读取的最大字符数,例如 %2W 。 如果未指定 N,则默认值为 1允许使用前导零,但不是必需的。 %OW (字母 O ,不是零)分析了区域设置的替代表示形式。1 |
一天中的某个时间
说明符 | 说明 |
---|---|
%H N % H %OH |
以十进制数表示的小时(24 小时制)。 如果结果是个位数,它的前缀是 0 (零)。% NH 指定要读取的最大字符数,例如 %1H 。 如果未指定 N,则默认值为 2。允许使用前导零,但不是必需的。 %OH (字母 O ,不是零)分析了区域设置的替代表示形式。1 |
%I N % I %OI |
以十进制数表示的小时(12 小时制)。 如果结果是个位数,它的前缀是 0 (零)。% NI 指定要读取的最大字符数,例如 %1I 。 如果未指定 N,则默认值为 2。允许使用前导零,但不是必需的。 %OI (字母 O ,不是零)分析了区域设置的替代表示形式。1 |
%M N % M %OM |
以十进制数表示的分钟数。 如果结果是个位数,它的前缀是 0 (零)。% NM 指定要读取的最大字符数,例如 %3M 。 如果未指定 N,则默认值为 2。允许使用前导零,但不是必需的。 %OM (字母 O ,不是零)分析了区域设置的替代表示形式。1 |
%S N % S %OS |
以十进制数表示的秒数。 如果秒数小于 10,则结果的前缀是 0 (零)。 如果输入的精度无法用秒精确地表示,则格式为具有固定格式的十进制浮点数。 如果函数无法在 18 位小数位数内转换浮点十进制秒数,则其精度为微秒。 否则,其精度与输入的精度一致。 小数点的字符根据区域设置进行本地化。% NS 指定要读取的最大字符数,例如 %3S 。 如果未指定 N,则默认值为 2。允许使用前导零,但不是必需的。 %OS (字母 O ,不是零)分析了区域设置的替代表示形式。1 |
%p |
与 12 小时制关联的 AM/PM 指定的区域设置等效项。 |
%r |
区域设置的 12 小时制时间。 |
%R |
等效于 %H:%M 。 |
%T |
等效于 "%H:%M:%S" 。 |
%X , %EX |
区域设置的时间表示形式。%EX 分析区域设置的替代时间表示形式。1 |
月
说明符 | 说明 |
---|---|
%b 、 %B 、、 %h |
区域设置的完整或缩写的月份名称。 如果值不包含有效月份,则会引发 format_error 异常。%h 等效于 %b 。 |
%m , % Nm , %Om |
以十进制数字表示的月份。 1 月为 1。% Nm 指定要读取的最大字符数,例如 %3m 。 如果未指定 N,则默认值为 2。允许使用前导零,但不是必需的。 %Om (字母 O ,不是零)解释区域设置的替代表示形式。1 |
年
说明符 | 说明 |
---|---|
%C , % NC , %EC |
以十进制数表示的世纪。% NC 指定要读取的最大字符数,例如 %1N 。 如果未指定 N,则默认值为 2。 允许使用前导零,但不是必需的。%EC 解释世纪的区域设置替代表示形式。 |
%y , % Ny , %Ey , %Oy |
年份的最后两位十进制数字。 如果未指定世纪(例如通过使用 %C ),则假定范围 [69, 99] 中的值是指 1969 年到 1999 年,假定范围 [00, 68] 中的值是指 2000 年到 2068 年。% Ny 指定要读取的最大字符数。 如果未指定 N,则默认值为 2。允许使用前导零,但不是必需的。 %Ey 和 %Oy (字母 O 不是零)解释区域设置的替代表示形式。1 |
%Y , % NY , %EY , |
以十进制数表示的年份。 如果结果少于四位数,则从左侧用 0 (零)填充到四位数。% NY 指定要读取的最大字符数。 如果未指定 N,则默认值为 4。%EY 分析区域设置的全年替代表示形式。1 |
ISO 8601 基于周的年份
在 ISO 8601 中,一周是从星期一开始的。 一年的第一周必须包括 1 月 4 日,并包括一年的第一个星期四。
说明符 | 替代功能 |
---|---|
%g N % g |
ISO 基于周的年份的最后两个十进制数字。 如果结果是个位数,它的前缀是 0 (零)。 % Ng 指定要读取的最大字符数,例如 %1g 。 如果未指定 N,则默认值为 2 |
%G N % G |
以十进制数表示的 ISO 基于周的年份。 如果结果少于四位数,则从左侧用 0 (零)填充到四位数。 % NG 指定要读取的最大字符数,例如 %1G 。 如果未指定 N,则默认值为 4 |
%V %OV N % V |
以十进制数表示的 ISO 基于周的周数。 如果结果是个位数,它的前缀是 0 (零)。 % NV 指定要读取的最大字符数,例如 %1V 。 如果未指定 N,则默认值为 2%OV (字母 O ,不是零)分析了区域设置的替代表示形式。1 |
常规
说明符 | 替代功能 |
---|---|
%% |
匹配 % 字符 |
%c %Ec |
区域设置的日期和时间表示形式。%Ec 解释区域设置的替代日期和时间表示形式。1 |
%n |
匹配新行字符 |
%t |
匹配零个或一个空格字符 |
%z %Ez %Oz |
采用 [+|-]hh[mm] 格式的与 UTC 的偏移量。 例如,-0430 是指比 UTC 晚 4 小时 30 分钟,04 是指比 UTC 提前 4 小时。%Ez 和 %Oz (字母 O ,不是零)分析小时和分钟之间的 : ,并在小时字段上呈现前导零(可选)1:[+|-]h[h][:mm] 。 例如,-04:30 是指比 UTC 晚 4 小时 30 分钟,4 是指比 UTC 提前 4 小时。 |
%Z |
时区的缩写或名称。 将分析单个字词。 此字词只能包含基本源字符集中的字母数字字符,或者 _ 、/ 、- 或 + 中的一个。 |
按类型的标记
类 | 说明符/标记 |
---|---|
day |
d、e |
duration |
j、H、I、M、S、r、R、T、p(q、Q 仅用于格式,不进行分析) |
file_time |
Z、z、c、x、X、D、F、g、G、j、U、V、W、Y、y、C、b、h、B、m、d、e、a、A、u、w、H、I、M、S、r、R、T、p |
gps_time |
Z、z、c、x、X、D、F、g、G、j、U、V、W、Y、y、C、b、h、B、m、d、e、a、A、u、w、H、I、M、S、r、R、T、p |
hh_mm_ss |
H、I、M、S、r、R、T、p |
local_time |
c、x、X、D、F、g、G、j、U、V、W、Y、y、C、b、h、B、m、d、e、a、A、u、w、H、I、M、S、r、R、T、p |
local_time_format_t |
z、Z、c、x、X、D、F、Y、C、y、b、B、h、m、d、e、a、A、u、w、H、I、M、S、r、R、T、p、g、G、U、V、W |
local_info |
z、Z |
month |
b、h、B、m |
month_day |
B、d、j、e、b、h、m |
month_day_last |
B、d、j、e、b、h、m |
month_weekday |
b、B、h、m、a、A、u、w |
month_weekday_last |
b、B、h、m、a、A、u、w |
sys_info |
z、Z |
sys_time |
Z、z、c、x、X、D、F、g、G、j、U、V、W、Y、y、C、b、h、B、m、d、e、a、A、u、w、H、I、M、S、r、R、T、p |
tai |
Z、z、c、x、X、D、F、g、G、j、U、V、W、Y、y、C、b、h、B、m、d、e、a、A、u、w、H、I、M、S、r、R、T、p |
utc_time |
Z、z、c、x、X、D、F、g、G、j、U、V、W、Y、y、C、b、h、B、m、d、e、a、A、u、w、H、I、M、S、r、R、T、p |
weekday |
a、A、u、w |
weekday_indexed |
a、A、u、w |
weekday_last |
a、A、u、w |
year |
Y、y、C |
year_month |
Y、y、B、g、G、h、C、b、m |
year_month_day |
D、F、g、G、j、U、V、W、Y、y、C、b、h、B、m、d、e、a、A、u、w |
year_month_day_last |
D、F、g、G、j、U、V、W、Y、y、C、b、h、B、m、d、e、a、A、u、w |
year_month_weekday |
D、F、g、G、j、U、V、W、Y、y、C、b、h、B、m、d、e、a、A、u、w |
year_month_weekday_last |
D、F、g、G、j、U、V、W、Y、y、C、b、h、B、m、d、e、a、A、u、w |
zoned_time |
z、Z、c、x、X、D、F、Y、C、y、b、B、h、m、d、e、a、A、u、w、H、I、M、S、r、R、T、p、g、G、U、V、W |
1该实现目前与 strftime 一致,尽管 O
(字母 O)和 e
被接受,但它们被忽略了。 也就是说,"%Od"
被解释为 "%d"
。
get_leap_second_info
返回指定时间的 leap_second_info
。 这提供了有关提供的时间是否发生在闰秒插入期间的信息。 它还提供在 1970 年 1 月 1 日到指定时间之间添加的闰秒数。 当国际地球自转和参考系服务 (IERS) 宣布将添加一个闰秒(产生一个 61 秒的分钟)来解释原子时间与通过测量地球自转跟踪的时间之间的差异时,会出现闰秒插入,因为地球自转是不规则的,并且在逐渐变慢。
语法
template<class Duration>
leap_second_info
get_leap_second_info(const utc_time<Duration>& ut); // C++20
参数
ut
要为其获取 leap_second_info
的源 utc_time
。
返回值
如果 ut
在正闰秒插入期间,则返回其成员 is_leap_second
为 true
的 leap_second_info
,否则为 false
。 该 elapsed
成员保存纪元日期 1970-01-01
和之间的跃点秒之和 ut
。 如果 is_leap_second
为 true
,则 ut
所指的闰秒包括在 elapsed
总和中。
get_tzdb
获取程序范围的时区数据库列表中的第一个条目。
语法
const tzdb& get_tzdb(); // C++20
返回值
返回对第一个 tzdb
对象的引用,就像调用 get_tzdb_list().front()
的结果一样。 如果它是对时区数据库的第一个引用,并且无法初始化时区数据库,则会引发 runtime_error
异常。
备注
如果尚未初始化,则 get_tzdb
会在首次访问时初始化程序范围的时区数据库。 初始化后,该数据库是一个 tzdb_list
,它存放单个已初始化的 tzdb
对象。
get_tzdb_list
获取程序范围的单一实例时区数据库。
语法
tzdb_list& get_tzdb_list(); // C++20
返回值
返回对程序范围的 tzdb_list
对象的引用。 如果无法返回对有效的 runtime_error
对象的引用,则会引发 tzdb_list
异常。
注解
如果尚未初始化,则 get_tzdb_list
会在首次访问时初始化程序范围的时区数据库。 初始化后,该数据库是一个 tzdb_list
,它存放单个已初始化的 tzdb
对象。 get_tzdb_list
函数是线程安全的。
is_am
表示指定的小时是否在一天的上午 (AM) 部分的谓词。
语法
constexpr bool is_am(const hours& h) noexcept; // C++20
参数
h
24 小时时间表示法中的源 hours
表示形式。
返回值
如果 0h <= h && h <= 11h
,则返回 true
;否则返回 false
。
is_pm
表示指定的小时是否在一天的下午 (PM) 部分的谓词。
语法
constexpr bool is_pm(const hours& h) noexcept; // C++20
参数
h
24 小时时间表示法中的源 hours
表示形式。
返回值
如果 12h <= h && h <= 23h
,则返回 true
;否则返回 false
。
locate_zone
获取由时区名称指定的时区对象。
语法
const time_zone* locate_zone(string_view tz_name); // C++20
参数
tz_name
要返回的时区的名称。
返回值
返回一个指向 time_zone
的指针,就像调用 get_tzdb().locate_zone(tz_name)
的结果一样。 如果它找不到指定的时区,或者如果它是对时区数据库的第一个引用,并且无法初始化时区数据库,则会引发 runtime_error
异常。
备注
如果尚未初始化,则 locate_zone
会在首次访问时初始化程序范围的时区数据库。 初始化后,该数据库是一个 tzdb_list
,它存放单个已初始化的 tzdb
对象。
make12
以 12 小时时间表示法返回指定的小时。
语法
constexpr hours make12(const hours& h) noexcept; // C++20
参数
h
24 小时时间表示法中的源 hours
表示形式。
返回值
返回范围 [1h, 12h]
中 h
的 12 小时制等效项。 如果 h
不在范围 [0h, 23h]
内,则返回值是未指定的。
make24
以 24 小时时间表示法返回指定的小时。
语法
constexpr hours make24(const hours& h, bool is_pm) noexcept; // C++20
参数
h
12 小时时间表示法中的源 hours
表示形式。
is_pm
源 hours
表示形式为 PM(如果为 true
)或 AM(如果为 false
)。
返回值
如果 is_pm
为 false
,则 make24
返回范围 [0h, 11h]
中 h
的 24 小时等效项,假设 h
表示 AM 小时。 否则,返回范围 [12h, 23h]
中 h
的 24 小时等效项,假设 h
表示 PM 小时。 如果 h
不在范围 [1h, 12h]
内,则返回值是未指定的。
reload_tzdb
如果有更新的信息,则重新加载时区数据库。
语法
const tzdb& reload_tzdb();
返回值
在进行时区数据库更新(如果有)后,reload_tzdb
将返回对第一个 tzdb
对象的引用,就像调用 get_tzdb_list().front()
的结果一样。 如果无法返回对有效的 runtime_error
对象的引用,则会引发 tzdb
异常。
注解
本地时区数据库是程序首次访问数据库(例如通过调用 current_zone
)时提供的数据库。 在程序运行过程中,实现可能会更新时区数据库。 除非程序调用 reload_tzdb
函数,否则更新不会以任何方式影响程序。 可能会更新的时区数据库称为远程时区数据库。
reload_tzdb
函数会检查本地时区数据库和远程时区数据库的版本。 如果本地数据库和远程数据库的版本相同,则不会进行更改。 否则,远程数据库将被推送到 get_tzdb_list
访问的 tzdb_list
的前面。 更新不会使任何指针、引用或迭代器失效。 对于调用 get_tzdb_list().front()
和 get_tzdb_list().erase_after()
,reload_tzdb
函数是线程安全的。
remote_version
获取包含最新远程数据库版本的字符串。
语法
string remote_version();
返回值
返回包含最新远程数据库版本的 string
。
round(duration)
将指定的 duration
舍入到目标类型中最接近的可表示 duration
。
语法
template<class ToDuration, class Rep, class Period>
constexpr ToDuration
round(const duration<Rep, Period>& d); // C++17
参数
ToDuration
目标 duration
类型。 约束为 duration
的专用化,其中 treat_as_floating_point_v<typename ToDuration::rep>
为 false
。
Rep
源duration
d
的内部表示形式的类型。
Period
一种 std::ratio
类型,表示每秒与源 Rep
类型的比率(即每 Rep
的秒数)。
d
源 duration
对象。
返回值
返回 ToDuration
中可表示的最接近参数 d
的 duration
。 取偶数值,即值 t
,其中 t % 2 == 0
。
注解
除非 ToDuration
类型是 duration
的实例,并且 ToDuration
具有整型表示形式,否则 round
不会参与重载解析。
round(time_point)
返回目标 duration
中可表示的最接近指定时间点的时间点。
template<class ToDuration, class Clock, class Duration>
constexpr time_point<Clock, ToDuration>
round(const time_point<Clock, Duration>& tp);
参数
ToDuration
目标 duration
类型。 约束为 duration
的专用化,其中 treat_as_floating_point_v<typename ToDuration::rep>
为 false
。
Clock
结果和源参数 tp
的常见时钟类型。
Duration
tp
的 duration
类型。
tp
源 time_point
对象。
返回值
返回可使用 ToDuration
表示的最接近 tp
的时间点。 取偶数值,即值 t
,其中 t % 2 == 0
。 实际上是 time_point<Clock, ToDuration>(round<ToDuration>(tp.time_since_epoch()));
。
注解
除非 ToDuration
类型是 duration
的实例,否则 round
不会参与重载解析。
time_point_cast
将 time_point
对象强制转换为具有不同的 duration
类型的 time_point
。
语法
template <class ToDuration, class Clock, class Duration>
time_point<Clock, ToDuration>
time_point_cast(const time_point<Clock, Duration>& tp); // C++11
参数
ToDuration
目标 duration
类型。 约束为 duration
的专用化。
Clock
结果和源参数 tp
的常见时钟类型。
Duration
tp
的 duration
类型。
tp
要强制转换为具有 ToDuration
类型的对象的 time_point
对象。
返回值
返回具有 ToDuration
类型的 time_point
对象。 实际上是 time_point<Clock, ToDuration>(duration_cast<ToDuration>(t.time_since_epoch()));
。
备注
除非 ToDuration
是 duration
的专用化,否则此函数不参与重载解析。
另请参阅
<chrono>
chrono
文本
chrono
运算符
duration
类
time_point
类
time_zone
类