std::formatter<std::chrono::local_time>
| 定义于头文件 <chrono> |
||
| template< class Duration, class CharT > struct formatter<std::chrono::local_time<Duration>, CharT>; |
||
std::formatter 的特化,它定义了 std::chrono::local_time 的格式化规则。
如果使用了 %Z、%z 或 %z 的修改形式,则会抛出 std::format_error。
std::formatter 通常不直接访问,而是通过格式化函数使用。
[编辑] 格式规范
格式规范的形式为
填充与对齐 (可选) 宽度 (可选) 精度 (可选) L(可选) chrono-spec (可选) |
|||||||||
填充与对齐、宽度 和 精度 的含义与标准格式规范中相同。精度仅对表示类型 Rep 为浮点类型的 std::chrono::duration 类型有效,否则会抛出 std::format_error。
用于格式化的区域设置确定如下:
- 如果格式规范中不存在
L,则使用默认的 "C" 区域设置, - 否则,如果传递给格式化函数,则使用 std::locale 所表示的区域设置,
- 否则(存在
L但没有将 std::locale 传递给格式化函数),则使用全局区域设置。
如果(普通或宽)字符串字面量编码是 Unicode 编码形式,并且区域设置属于实现定义的区域设置集合,则每个依赖于区域设置的替换都将执行,如同替换字符序列被转换为字面量编码一样。
chrono-spec 由一个或多个转换说明符和普通字符(除了 {、} 和 %)组成。chrono-spec 必须以转换说明符开头。所有普通字符都原样写入输出。每个未修改的转换说明符都以一个 % 字符开头,后面跟着一个字符,该字符确定说明符的行为。某些转换说明符具有修改形式,其中在 % 字符之后插入 E 或 O 修饰符字符。每个转换说明符都按以下所述替换为输出中的相应字符。
除非另有说明,如果 chrono-spec 为空,则 chrono 对象将格式化,如同通过将其流式传输到类型为 std::basic_ostringstream<CharT> 的对象 os 中,并使用格式化区域设置(std::locale::classic()、传递的 std::locale 对象和 std::locale::global() 中的一个)填充,并将 os.str() 复制到输出缓冲区,并根据格式说明符进行额外的填充和调整。
以下格式说明符可用:
| 转换 说明符 |
解释 | |
|---|---|---|
%%
|
写入字面量 % 字符。 | |
%n
|
写入换行符。 | |
%t
|
写入水平制表符。 | |
| 年 | ||
%C %EC
|
使用向下取整除法写入年份除以 100 的结果。如果结果是一个十进制数字,则在其前面加上 0。 修改后的命令 | |
%y %Oy %Ey
|
写入年份的最后两位十进制数字。如果结果是一位数字,则在其前面加上 0。 修改后的命令 修改后的命令 | |
%Y %EY
|
将年份作为十进制数字写入。如果结果小于四位数字,则在其前面用 0 填充到四位数字。 修改后的命令 | |
| 月 | ||
%b%h
|
写入区域设置的缩写月份名称。 | |
%B
|
写入区域设置的完整月份名称。 | |
%m%Om
|
将月份作为十进制数字写入(一月为 01)。如果结果是一个数字,则在其前面加上 0。修改后的命令 | |
| 日 | ||
%d%Od
|
将月份中的日期作为十进制数字写入。如果结果是一个十进制数字,则在其前面加上 0。 修改后的命令 | |
%e%Oe
|
将月份中的日期作为十进制数字写入。如果结果是一个十进制数字,则在其前面加上一个空格。 修改后的命令 | |
| 星期几 | ||
%a
|
写入区域设置的缩写工作日名称。 | |
%A
|
写入区域设置的完整工作日名称。 | |
%u%Ou
|
将 ISO 工作日作为十进制数字写入 (1-7),其中星期一为 1。修改后的命令 | |
%w%Ow
|
将工作日作为十进制数字写入 (0-6),其中星期日为 0。修改后的命令 | |
| ISO 8601 基于周的年份 | ||
|
在ISO 8601中,周以星期一开始,一年的第一周必须满足以下要求
| ||
%g
|
写入 ISO 8601 基于周的年份的最后两位十进制数字。如果结果是一位数字,则在其前面加上 0。 | |
%G
|
将 ISO 8601 基于周的年份作为十进制数字写入。如果结果小于四位数字,则在其前面用 0 填充到四位数字。 | |
%V%OV
|
将 ISO 8601 年份的周数作为十进制数字写入。如果结果是一个数字,则在其前面加上 0。 修改后的命令 | |
| 年份中的周/天 | ||
%j
|
将年份中的日期作为十进制数字写入(1 月 1 日为 001)。如果结果小于三位数字,则在其前面用 0 填充到三位数字。 | |
%U%OU
|
将年份的周数作为十进制数字写入。年份的第一个星期日是第 01 周的第一天。在此之前的同年日期属于第 00 周。如果结果是一个数字,则在其前面加上 0。 修改后的命令 | |
%W%OW
|
将年份的周数作为十进制数字写入。年份的第一个星期一是第 01 周的第一天。在此之前的同年日期属于第 00 周。如果结果是一个数字,则在其前面加上 0。 修改后的命令 | |
| 日期 | ||
%D
|
等效于"%m/%d/%y"。 | |
%F
|
等同于 "%Y-%m-%d"。 | |
%x%Ex
|
写入区域设置的日期表示。 修改后的命令 | |
| 日间时间 | ||
%H%OH
|
将小时(24 小时制)作为十进制数字写入。如果结果是一个数字,则在其前面加上 0。 修改后的命令 | |
%I%OI
|
将小时(12 小时制)作为十进制数字写入。如果结果是一个数字,则在其前面加上 0。 修改后的命令 | |
%M%OM
|
将分钟作为十进制数字写入。如果结果是一个数字,则在其前面加上 0。 修改后的命令 | |
%S%OS
|
将秒作为十进制数字写入。如果秒数小于 10,则结果前面加上 0。 如果输入的精度无法用秒精确表示,则格式为具有固定格式的十进制浮点数,其精度与输入精度匹配(如果转换为浮点十进制秒无法在 18 位小数内完成,则为微秒精度)。小数点字符根据区域设置进行本地化。 修改后的命令 | |
%p
|
写入区域设置中与 12 小时制相关联的 AM/PM 表示。 | |
%R
|
等效于"%H:%M"。 | |
%T
|
等效于"%H:%M:%S"。 | |
%r
|
写入区域设置的 12 小时制时间。 | |
%X%EX
|
写入区域设置的时间表示。 修改后的命令
| |
| 时区 | ||
%z%Ez%Oz
|
以 ISO 8601 格式写入与 UTC 的偏移量。例如 -0430 表示比 UTC 晚 4 小时 30 分钟。如果偏移量为零,则使用 +0000。修改后的命令 | |
%Z
|
写入时区缩写。 | |
| 杂项 | ||
%c%Ec
|
写入区域设置的日期和时间表示。 修改后的命令 | |
以下说明符可识别,但会抛出 std::format_error
| 转换 说明符 |
解释 | |
|---|---|---|
| 持续时间计数 | ||
%Q
|
写入持续时间的滴答计数,即通过 count() 获得的值。 | |
%q
|
写入持续时间的单位后缀,如 operator<<() 中指定。 | |
[编辑] 示例
| 本节不完整 原因:无示例 |
[编辑] 另请参阅
| (C++20) |
将参数的格式化表示存储在新字符串中 (函数模板) |