名稱空間
變體
操作

std::chrono::from_stream (std::chrono::sys_time)

來自 cppreference.com
< cpp‎ | chrono‎ | system_clock
 
 
 
 
template< class CharT, class Traits, class Duration, class Alloc = std::allocator<CharT> >

std::basic_istream<CharT, Traits>&
    from_stream( std::basic_istream<CharT, Traits>& is, const CharT* fmt,
                 std::chrono::sys_time<Duration>& tp,
                 std::basic_string<CharT, Traits, Alloc>* abbrev = nullptr,

                 std::chrono::minutes* offset = nullptr );
(C++20 起)

嘗試根據格式字串 fmt 將輸入流 is 解析為時間點 tp

其行為類似於 UnformattedInputFunction,除了它對 is.gcount() 具有未指定的效應。構造並檢查 sentry 物件後,嘗試根據格式字串 fmt 將輸入流 is 解析為 tp。如果解析未能解碼有效的時間點,則呼叫 is.setstate(std::ios_base::failbit),並且 tp 不會被修改。

如果使用了格式說明符 %Z 併成功解析,則如果 abbrev 不為空,則解析的值將分配給 *abbrev。如果使用了格式說明符 %z 或其變體併成功解析,則如果 offset 不為空,則解析的值將分配給 *offset,並且解析的偏移量將在分配給 tp 之前從解析的時間戳中減去。

目錄

[edit] 引數

is - 一個輸入流
fmt - 格式字串(見下文)
tp - 用於儲存解析結果的時間點物件
abbrev - 如果不為 null,則指向一個物件,該物件將儲存與 %Z 說明符對應時區縮寫或名稱
offset - 如果不為 null,則指向一個物件,該物件將儲存與 %z 說明符對應的 UTC 偏移量

[edit] 格式字串

格式字串由零個或多個轉換說明符和普通字元組成。每個普通字元(空白字元和終止空字元除外)與輸入流中的一個相同字元匹配,如果流中的下一個字元不相等,則導致函式失敗。

每個空白字元匹配輸入流中的零個或多個空白字元。

每個未修改的轉換說明符以 % 字元開頭,後跟一個決定說明符行為的字元。某些轉換說明符具有修改形式,其中在 % 字元後插入一個 EO 修飾符字元。某些轉換說明符具有修改形式,其中在 % 字元後插入一個正十進位制整數作為寬度引數(如下所示為 N)。每個轉換說明符都會根據下表將匹配的字元解釋為日期和時間型別的部分。

格式字串中以%開頭但與下面任一轉換說明符不匹配的字元序列被解釋為普通字元。

如果 from_stream 未能解析格式字串指定的所有內容,或者解析的資訊不足以指定完整結果,或者解析顯示矛盾資訊,則會呼叫 is.setstate(std::ios_base::failbit)

以下轉換說明符可用

轉換
說明符
解釋
%% 匹配字面值%字元。
%n 匹配一個空白字元。
%t 匹配零個或一個空白字元。
%C
%NC
%EC
將世紀解析為十進位制數。寬度N指定要讀取的最大字元數。預設寬度為2。允許但不要求前導零。

修改後的命令%EC解釋區域設定的世紀替代表示。

%y
%Ny
%Ey
%Oy
解析年份的最後兩位十進位制數字。如果未另外指定世紀(例如,使用 %C),則範圍 [69, 99] 中的值被假定指代 1969 年到 1999 年,而範圍 [00, 68] 中的值被假定指代 2000 年到 2068 年。寬度 N 指定要讀取的最大字元數。預設寬度為 2。允許但不要求前導零。

修改後的命令%Ey%Oy解釋區域設定的替代表示。

%Y
%NY
%EY
將年份解析為十進位制數。寬度N指定要讀取的最大字元數。預設寬度為4。允許但不要求前導零。

修改後的命令%EY解釋區域設定的替代表示。

%b
%B
%h
解析區域設定的完整或縮寫的不區分大小寫的月份名稱。
%m
%Nm
%Om
將月份解析為十進位制數(一月為1)。寬度N指定要讀取的最大字元數。預設寬度為2。允許但不要求前導零。

修改後的命令%Om解釋區域設定的替代表示。

%d
%Nd
%Od
%e
%Ne
%Oe
將月份中的日期解析為十進位制數。寬度N指定要讀取的最大字元數。預設寬度為2。允許但不要求前導零。

修改後的命令%Od%Oe解釋區域設定的替代表示。

星期幾
%a
%A
解析區域設定的完整或縮寫的不區分大小寫的星期幾名稱。
%u
%Nu
將ISO星期幾解析為十進位制數(1-7),其中星期一為1。寬度N指定要讀取的最大字元數。預設寬度為1。允許但不要求前導零。
%w
%Nw
%Ow
將星期幾解析為十進位制數(0-6),其中星期日為0。寬度N指定要讀取的最大字元數。預設寬度為1。允許但不要求前導零。

修改後的命令%Ow解釋區域設定的替代表示。

ISO 8601 基於周的年份

在ISO 8601中,周以星期一開始,一年的第一週必須滿足以下要求

  • 包含1月4日
  • 包含一年中的第一個星期四
%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。允許但不要求前導零。

修改後的命令%OU解釋區域設定的替代表示。

%W
%NW
%OW
將年份的週數解析為十進位制數字。該年的第一個星期一是第 01 周的第一天。該年之前的天數在第 00 周。寬度 N 指定要讀取的最大字元數。預設寬度為 2。允許但不要求前導零。

修改後的命令%OW解釋區域設定的替代表示。

日期
%D 等效於"%m/%d/%y"
%F
%NF
等效於"%Y-%m-%d"。如果指定了寬度,則僅應用於%Y
%x
%Ex
解析區域設定的日期表示。

修改後的命令%Ex解釋區域設定的替代日期表示。

日間時間
%H
%NH
%OH
將小時(24小時制)解析為十進位制數。寬度N指定要讀取的最大字元數。預設寬度為2。允許但不要求前導零。

修改後的命令%OH解釋區域設定的替代表示。

%I
%NI
%OI
將小時(12小時制)解析為十進位制數。寬度N指定要讀取的最大字元數。預設寬度為2。允許但不要求前導零。

修改後的命令%OI解釋區域設定的替代表示。

%M
%NM
%OM
將分鐘解析為十進位制數。寬度N指定要讀取的最大字元數。預設寬度為2。允許但不要求前導零。

修改後的命令%OM解釋區域設定的替代表示。

%S
%NS
%OS
將秒解析為十進位制數字。寬度 N 指定要讀取的最大字元數。如果 Duration 可以轉換為 std::chrono::seconds,則預設寬度為 2,否則由 Duration 的十進位制精度決定,並將該欄位解釋為固定格式的長雙精度浮點數,小數點字元由 locale 確定(如果遇到)。允許但不要求前導零。

修改後的命令%OS解釋區域設定的替代表示。

%p 解析區域設定的12小時制時鐘相關的AM/PM指示符的等效項。
%R 等效於"%H:%M"
%T 等效於"%H:%M:%S"
%r 解析區域設定的12小時制時間。
%X
%EX
解析區域設定的時間表示。

修改後的命令%EX解釋區域設定的替代時間表示。

雜項
%c
%Ec
解析區域設定的日期和時間表示。

修改後的命令%Ec解釋區域設定的替代日期和時間表示。

%z
%Ez
%Oz
解析UTC偏移量,格式為[+|-]hh[mm]。例如,-0430表示比UTC晚4小時30分鐘,04表示比UTC早4小時。

修改後的命令%Ez%Oz解析格式[+|-]h[h][:mm](即,小時和分鐘之間需要一個:,並且小時的前導零是可選的)。

%Z 解析時區縮寫或名稱,被認為是隻包含字元 AZaz09-+_/ 的最長字元序列。

[edit] 返回值

is

[edit] 示例

[edit] 另請參閱

(C++20)
從流解析 chrono 物件
(函式模板) [編輯]