名稱空間
變體
操作

std::chrono::from_stream (std::chrono::utc_time)

來自 cppreference.com
< cpp‎ | chrono‎ | utc_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::utc_time<Duration>& tp,
                 std::basic_string<CharT, Traits, Alloc>* abbrev = nullptr,

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

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

行為類似於非格式化輸入函式,但它對is.gcount()有未指定的副作用。構造並檢查守衛物件後,嘗試根據格式字串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
將秒解析為十進位制數字。如果Duration可轉換為std::chrono::seconds,則寬度N指定要讀取的最大字元數,預設寬度為2;否則,由Duration的十進位制精度決定,且該欄位以固定格式解釋為長雙精度浮點數,小數點字元由區域設定決定(如果遇到)。允許但不要求前導零。

修改後的命令%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 物件
(函式模板) [編輯]