<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
durationd的内部表示形式的类型。

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
durationd的内部表示形式的类型。

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
tpduration 类型。

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
SourceClockduration,或者由你来指定。

SourceClock
要转换的 time_point 所基于的时钟类型。

t
要转换的 time_point

返回值

time_point 等效于 t,但特定于 DestClock

备注

如果未显式传递参数 SourceClockDuration,可以通过类模板自变量推导来进行推断。 例如,如果 clock_cast<utc_clock>(file_clock::now())SourceClock 将推断为 file_clockDuration 将推断为 file_clock::duration

在以下格式标准的时钟转换列表中,选择了从 SourceClockDestClock 的转换步骤最少的一个。

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
durationd的内部表示形式的类型。

Period
一种 std::ratio 类型,表示每秒与源 Rep 类型的比率(即每 Rep 的秒数)。

d
要强制转换为目标 duration 类型的源 duration 对象。

返回值

一个表示 ToDuration . duration d类型的对象。 如有必要,它将被截断以适合目标类型。 如果源包含一个 NaN、一个无穷大或者对于目标 duration 中的表示形式来说太大,则将浮点 duration 强制转换为整型 duration 的结果是不确定的。

备注

当源时间段正好能被目标时间段整除时,则无需使用 duration_castduration 类型之间转换,例如将分钟数转换为秒数。 此外,无需在浮点 duration 类型之间进行转换。 可以使用普通强制转换或 duration 构造函数执行这两种转换。

除非 ToDurationduration 的实例,否则 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
durationd的内部表示形式的类型。

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
tpduration 类型。

tp
time_point 对象。

返回值

返回可使用 ToDuration 表示的小于或等于 tp 的最大时间点。 实际上是 time_point<Clock, ToDuration>(floor<ToDuration>(tp.time_since_epoch()));

注解

除非 ToDuration 类型是 duration 的实例,否则 floor 不会参与重载解析。

from_stream

使用指定格式将输入流分析为其中一个 std::chrono 时间或间隔类型,例如 daymonthmonth_dayweekdayyearyear_monthyear_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_stringbasic_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 1001。 如果结果少于三位数,则从左侧用 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_secondtrueleap_second_info,否则为 false。 该 elapsed 成员保存纪元日期 1970-01-01 和之间的跃点秒之和 ut。 如果 is_leap_secondtrue,则 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_pmfalse,则 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
durationd的内部表示形式的类型。

Period
一种 std::ratio 类型,表示每秒与源 Rep 类型的比率(即每 Rep 的秒数)。

d
duration 对象。

返回值

返回 ToDuration 中可表示的最接近参数 dduration。 取偶数值,即值 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
tpduration 类型。

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
tpduration 类型。

tp
要强制转换为具有 ToDuration 类型的对象的 time_point 对象。

返回值

返回具有 ToDuration 类型的 time_point 对象。 实际上是 time_point<Clock, ToDuration>(duration_cast<ToDuration>(t.time_since_epoch()));

备注

除非 ToDurationduration 的专用化,否则此函数不参与重载解析。

另请参阅

<chrono>
chrono 文本
chrono 运算符
duration
time_point
time_zone