std::chrono::format
template< class CharT, class Streamable>
std::basic_string<CharT> format(const CharT* fmt, const Streamable& s); |
(1) | (C++20 起) |
template<class CharT, class Streamable>
std::basic_string<CharT> format(const std::locale& loc, const CharT* fmt, const Streamable& s); |
(2) | (C++20 起) |
template<class CharT, class Traits, class Alloc, class Streamable>
std::basic_string<CharT, Traits, Alloc> format(const std::basic_string<CharT, Traits, Alloc>& fmt, |
(3) | (C++20 起) |
template<class CharT, class Traits, class Alloc, class Streamable>
std::basic_string<CharT, Traits, Alloc> format(const std::locale& loc, |
(4) | (C++20 起) |
用格式字符串 fmt
和 locale
loc
(若提供)格式化可流输出对象 s
。
这些函数表现为如同它们
- 构造 std::basic_ostringstream<CharT, Traits, Alloc>
os
(其中对于 (1,2)Traits
为 std::char_traits<CharT> 而Alloc
为 std::allocator<CharT> ); - 执行 os.exceptions(std::ios_base::failbit|std::ios_base::badbit) ;
- 调用 os.imbue(loc) (仅对于重载 (2,4) );
- 调用 to_stream(os, fmt, s) (对于 (1,2) )或 to_stream(os, fmt.c_str(), s) (对于 (3,4) ),其中调用无限定的
to_stream
以启用参数依赖查找; - 然后返回 os.str() 。
格式字符串
格式字符串由零或多个转换说明符和通常字符(除了 %
)构成。写入除了空终止字符的所有通常字符到输出流,而不修改。每个不修饰的转换说明符以 %
字符后随确定该说明符行为的字符开始。某些转换说明符拥有在 %
字符后插入 E
或 O
修饰符的修饰形式。在输出中,按后述方式以适当的字符替换每个转换说明符。
格式字符串中,以 %
开始但不匹配下列格式说明符之一的字符序列被转译成通常字符。
下列格式说明符可用:
转换 说明符 |
解释 | |
---|---|---|
%% |
写字面的 % 字符。 |
|
%n |
写换行字符。 | |
%t |
写水平制表符。 | |
年 | ||
%C %EC |
写年份除以 100 的向下取整结果。若结果仅有一位十进制,则加上前缀 0 。
修饰的命令 |
|
%y |
写年份的低二位十进制数。若结果仅有一位,则加上前缀 0 。 | |
%Y |
将年份写作十进制数。若结果少于四位,则向左添加 0 到四位。 | |
月 | ||
%b %h |
写本地环境的缩写月名。若值不含合法月份,则调用 os.setstate(std::ios_base::failbit) 。 | |
%B |
写本地环境的完整月名。若值不含合法月份,则调用 os.setstate(std::ios_base::failbit) 。 | |
%m %Om |
将月写作十进制数( 1 月为 01 )。若结果仅有一位,则加上前缀 0 。
修饰的命令 |
|
日 | ||
%d %Od |
将月之日写作十进制。若结果仅有一个十进制位,则加上前缀 0 。
修饰的命令 |
|
%e %Oe |
将月之日写作十进制。若结果仅有一个十进制位,则加上前缀空格。
修饰的命令 |
|
星期之日 | ||
%a |
写本地环境的缩写星期日期名。若值不含合法的星期日期,则调用 os.setstate(std::ios_base::failbit) 。 | |
%A |
写本地环境的完整星期日期名。若值不含合法的星期日期,则调用 os.setstate(std::ios_base::failbit) 。 | |
%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 。
若输入的精度不能准确地以秒表示,则格式为定点格式的十进制浮点数和匹配输入精度的精度 修饰的命令 |
|
%p |
写与 12 小时时钟关联的 AM/PM 记号的本地环境等价形式。 | |
%R |
等价于 "%H:%M" 。 |
|
%T |
等价于 "%H:%M:%S" 。 |
|
%r |
写本地环境的 12 小时时钟时间。 | |
%X %EX |
写本地环境的时间表示。
修饰的命令 |
|
杂项 | ||
%c %Ec |
写本地环境的日期和时间表示。
修饰的命令 |
|
%z %Ez %Oz |
写 ISO 8601 格式中距 UTC 的偏移。例如 -0430 指代 UTC 后 4 小时 30 分。若偏移为零,则用 +0000 。
修饰的命令 若偏移信息不可用,则调用 os.setstate(std::ios_base::failbit); 。 |
|
%Z |
写时区的缩写。
若时区缩写不可用,则调用 os.setstate(std::ios_base::failbit); 。 |
参阅
(C++20)
|
按照给定的格式输出 sys_time 到流 (函数模板) |
(C++20)
|
按照给定的格式输出 utc_time 到流 (函数模板) |
(C++20)
|
按照给定的格式输出 tai_time 到流 (函数模板) |
(C++20)
|
按照给定的格式输出 gps_time 到流 (函数模板) |
按照给定的格式输出 file_time 到流 (函数模板) |
|
按照给定的格式输出 local_time 到流 (函数模板) |
|
按照提供的格式输出 year 到流中(函数模板) |
|
按照提供的格式输出 month 到流中(函数模板) |
|
按照提供的格式输出 day 到流(函数模板) |
|
按照给定的格式输出 weekday 到流(函数模板) |
|
按照提供的格式输出 month_day 到流(函数模板) |
|
按照提供的格式输出 year_month 到流中(函数模板) |
|
按照提供的格式输出 year_month_day 到流中(函数模板) |
|
按照提供的格式输出 zoned_time 到流中(函数模板) |