std::chrono::from_stream (std::chrono::local_time)
| template< class CharT, class Traits, class Duration, class Alloc = std::allocator<CharT> > std::basic_istream<CharT, Traits>& |
(C++20 起) | |
嘗試根據格式字串 fmt 將輸入流 is 解析到時間點 tp。
行為類似於 未格式化輸入函式 (UnformattedInputFunction),但對 is.gcount() 具有未指定的效果。構造並檢查守衛物件後,嘗試根據格式字串 fmt 將輸入流 is 解析到 tp。如果解析未能解碼出有效的時間點,則呼叫 is.setstate(std::ios_base::failbit),並且 tp 不會被修改。
如果使用了格式說明符 %Z 併成功解析,則如果 abbrev 不為 null,則將解析後的值賦給 *abbrev。如果使用了格式說明符 %z 或其修改形式併成功解析,則如果 offset 不為 null,則將解析後的值賦給 *offset。
目錄 |
[編輯] 引數
| is | - | 一個輸入流 |
| fmt | - | 格式字串(見下文) |
| tp | - | 用於儲存解析結果的時間點物件 |
| abbrev | - | 如果不為 null,則指向一個物件,該物件將儲存與 %Z 說明符對應時區縮寫或名稱 |
| offset | - | 如果不為 null,則指向一個物件,該物件將儲存與 %z 說明符對應的 UTC 偏移量 |
[編輯] 格式字串
格式字串由零個或多個轉換說明符和普通字元組成。每個普通字元,除了空白字元和終止 null 字元,都與輸入流中的一個相同字元匹配,如果流中的下一個字元不相等,則導致函式失敗。
每個空白字元匹配輸入流中的零個或多個空白字元。
每個未修改的轉換說明符都以 % 字元開頭,後跟一個確定說明符行為的字元。某些轉換說明符具有修改形式,其中在 % 字元後插入一個 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 的十進位制精度確定,並將該欄位解釋為固定格式的長雙精度浮點數,小數點字元由區域設定決定(如果遇到)。允許但不要求前導零。修改後的命令 | |
%p
|
解析區域設定的12小時制時鐘相關的AM/PM指示符的等效項。 | |
%R
|
等效於"%H:%M"。 | |
%T
|
等效於"%H:%M:%S"。 | |
%r
|
解析區域設定的12小時制時間。 | |
%X%EX
|
解析區域設定的時間表示。 修改後的命令 | |
| 雜項 | ||
%c%Ec
|
解析區域設定的日期和時間表示。 修改後的命令 | |
%z%Ez%Oz
|
解析UTC偏移量,格式為[+|-]hh[mm]。例如,-0430表示比UTC晚4小時30分鐘,04表示比UTC早4小時。修改後的命令 | |
%Z
|
解析時區縮寫或名稱,取最長序列的字元,其中只包含 A 到 Z、a 到 z、0 到 9、-、+、_ 和 /。 | |
[編輯] 返回值
is
注意
與其他時鐘的 time_point 的 from_stream 過載不同,此過載不會從解析的時間戳中減去解析出的偏移量(如果有)。
[edit] 示例
| 本節不完整 原因:無示例 |
[編輯] 另請參閱
| (C++20) |
從流解析 chrono 物件(函式模板) |