std::chrono::from_stream (std::chrono::file_time)
template<class CharT, class Traits, class Duration, class Alloc =std::allocator<CharT>> std::basic_istream<CharT, Traits>& | (C++20 起) | |
尝试按照格式字符串 fmt 分析输入流 is 到时间点 tp 中。
表现为无格式输入函数,但它在 is.gcount() 上拥有未指定的效果。在构造并检查 sentry
对象后,尝试按照格式字符串 fmt 分析输入流 is 到 tp 中。若分析无法解码出合法的时间点,则调用 is.setstate(std::ios_base::failbit) 并且不修改 tp。
若使用并成功分析了格式说明符 %Z
,则若 abbrev 非空则赋分析的值给 *abbrev。若使用并成功分析了格式说明符 %z
或修饰的变体,则若 offset 非空则赋分析的值给 *offset ,并将在把差赋值给 tp 前从分析的时间戳减去分析的偏移。
目录 |
[编辑]参数
is | - | 输入流 |
fmt | - | 格式字符串 (见下文) |
tp | - | 用以持有分析结果的时间点对象 |
abbrev | - | 若非空,则其所指向的对象将持有对应于 %Z 说明符的时区缩写或名字 |
offset | - | 若非空,则其所指向的对象将持有对应于 %z 说明符的 UTC 偏移 |
[编辑] 格式字符串
格式字符串由零或更多个转换说明符和普通字符组成。每个普通字符,除了空白字符和空终止字符,都匹配一个来自输入流的等同字符,或若流上的下个字符不比较相等则导致函数失败。
每个空白字符匹配输入流中的零或更多个空白字符。
每个不修饰的转换说明符以 %
字符开始后随一个确定说明符行为的字符。某些转换说明符拥有一种修饰形式,其中在 %
字符后插入了修饰字符 E
或 O
。某些转换说明符拥有一种修饰形式,其中在 %
字符后插入作为十进制正整数(下面显示为 N
)的给定的宽度参数。每个转换说明符均导致匹配的字符被按照下表转译成时间和日期类型的各部分。
格式字符串中,以 %
开始但不匹配下列转换说明符之一的字符序列被转译成通常字符。
若 from_stream
无法分析格式字符串所指定的每项内容,或若分析出的信息不足以指定完整结果,或若分析透露矛盾的信息,则调用 is.setstate(std::ios_base::failbit)。
下列转换说明符可用:
转换 说明符 | 解释 | |
---|---|---|
%% | 匹配字面的 % 字符。 | |
%n | 匹配一个空白字符。 | |
%t | 匹配零或一个空白字符。 | |
年 | ||
%C %NC %EC | 将世纪分析成十进制数。宽度 N 指定要读取的最大字符数。默认宽度为 2。容许但不要求前导零。 修饰的命令 | |
%y %Ny %Ey %Oy | 分析年的低二位十进制位。若不另外指定世纪(例如用 %C),则预设范围 [69, 99] 中的值指代 1969 至 1999 年, 而预设范围 [00, 68] 中的值指代 2000 至 2068 年。宽度 N 指定要读取的最大字符数。默认宽度为 2。容许但不要求前导零。 修饰的命令 | |
%Y %NY %EY | 将年分析成十进制数。宽度 N 指定要读取的最大字符数。默认宽度为 4。容许但不要求前导零。 修饰的命令 | |
月 | ||
%b %B %h | 分析本地环境的完整或缩写的无关大小写的月名。 | |
%m %Nm %Om | 将月份分析成十进制数(一月为 1 )。宽度 N 指定要读取的最大字符数。默认宽度为 2。容许但不要求前导零。 修饰的命令 | |
日 | ||
%d %Nd %Od %e %Ne %Oe | 将月之日分析成十进制数。宽度 N 指定要读取的最大字符数。默认宽度为 2。容许但不要求前导零。 修饰的命令 | |
星期之日 | ||
%a %A | 分析本地环境的完整或缩写的无关大小写的星期之日名。 | |
%u %Nu | 分析 ISO 星期之日为十进制数 (1-7),其中星期一为 1 。宽度 N 指定要读取的最大字符数。默认宽度为 1。容许但不要求前导零。 | |
%w %Nw %Ow | 分析星期之日为十进制数 (0-6),其中星期日为 0 。宽度 N 指定要读取的最大字符数。默认宽度为 1。容许但不要求前导零。 修饰的命令 | |
ISO 8601 基于星期的年 | ||
ISO 8601 中,星期始于星期一,而每年的首周必须满足下列要求:
| ||
%g %Ng | 分析基于 ISO 8601 的年的低二位十进制数。宽度 N 指定要读取的最大字符数。默认宽度为 2。容许但不要求前导零。 | |
%G %NG | 将基于 ISO 8601 的年分析成十进制数。宽度 N 指定要读取的最大字符数。默认宽度为 4。容许但不要求前导零。 | |
%V %NV | 将基于 ISO 8601 的年之星期分析成十进制数。宽度 N 指定要读取的最大字符数。默认宽度为 2。容许但不要求前导零。 | |
年之星期/日 | ||
%j %Nj | 分析年之日为十进制数(1 月 1 日为 1 )。宽度 N 指定要读取的最大字符数。默认宽度为 3。容许但不要求前导零。 | |
%U %NU %OU | 分析年之星期为十进制数。该年的首个星期日是星期 01 的首日。同年中先于该天的日期属于星期 00。 宽度 N 指定要读取的最大字符数。默认宽度为 2。容许但不要求前导零。 | |
%W %NW %OW | 分析年之星期为十进制数。该年的首个星期一是星期 01 的首日。同年中先于该天的日期属于星期 00。 宽度 N 指定要读取的最大字符数。默认宽度为 2。容许但不要求前导零。 | |
日期 | ||
%D | 等价于 "%m/%d/%y" 。 | |
%F %NF | 等价于 "%Y-%m-%d" 。若指定宽度,则它只适用于 %Y 。 | |
%x %Ex | 分析本地环境的日期表示。 修饰的命令 | |
当天时刻 | ||
%H %NH %OH | 将时(24 小时时钟)分析成十进制数。宽度 N 指定要读取的最大字符数。默认宽度为 2。容许但不要求前导零。 修饰的命令 | |
%I %NI %OI | 将时(12 小时时钟)分析成十进制数。宽度 N 指定要读取的最大字符数。默认宽度为 2。容许但不要求前导零。 修饰的命令 | |
%M %NM %OM | 将分分析成十进制数。宽度 N 指定要读取的最大字符数。默认宽度为 2。容许但不要求前导零。 修饰的命令 | |
%S %NS %OS | 将秒分析成十进制数。宽度 N 指定要读取的最大字符数。若 Duration 可转换为 std::chrono::seconds,则默认宽度为 2,否则以 Duration 的十进制精度确定,该域被判读为固定格式的 long double 值,由本地环境确定小数点字符(若遇到)。容许但不要求前导零。 修饰的命令 | |
%p | 分析与 12 小时时钟关联的 AM/PM 记法的本地环境等价版本。 | |
%R | 等价于 "%H:%M" 。 | |
%T | 等价于 "%H:%M:%S" 。 | |
%r | 分析本地环境的 12 小时时钟时刻。 | |
%X %EX | 分析本地环境的时刻表示。 修饰的命令 | |
杂项 | ||
%c %Ec | 分析本地环境的日期和时间表示。 修饰的命令 | |
%z %Ez %Oz | 以格式 [+|-]hh[mm] 分析距 UTC 的偏移。例如 -0430 指代落后 UTC 4 小时 30 分,而 04 指代领先 UTC 4 小时。 修饰的命令 | |
%Z | 分析时区缩写或名称,取仅含字符 A 到 Z 、a 到 z 、0 到 9 、- 、+ 、_ 和 / 的最长字符序列。 |
[编辑] 返回值
is
[编辑] 参阅
(C++20) | 从流分析 chrono 对象 (函数模板) |