C++ iomanip 庫 - put_time 函式



描述

此函式首先構造一個 basic_ostream::sentry 型別的物件來訪問輸出序列。然後(如果評估哨兵物件為真),它呼叫 time_put::put(使用流的選定區域設定)來執行格式化和插入操作,並相應地調整流的內部狀態標誌。最後,在返回之前銷燬哨兵物件。

它用於插入 tmb 指向的日期和時間資訊的表示形式,並根據引數 fmt 指定的格式進行格式化。

宣告

以下是 std::put_time 函式的宣告。

template <class charT>
/*unspecified*/ put_time (const struct tm* tmb, const charT* fmt);

引數

tmb − 指向 struct tm 型別物件的指標,其中包含要格式化的日期和時間資訊。struct tm 是在 <ctime> 標頭檔案中定義的類。

fmt − time_put::put 用作格式字串的 C 字串。它包含任意組合的常規字元和特殊格式說明符。這些格式說明符由函式替換為相應的數值,以表示 tmb 中指定的時間。

它們都以百分號 (%) 開頭,如下所示:

說明符 替換為 示例
%a 縮寫工作日名稱* Thu
%A 完整工作日名稱* Thursday
%b 縮寫月份名稱* Aug
%B 完整月份名稱* August
%c 日期和時間表示* Thu Aug 23 14:55:02 2001
%C 年份除以 100 並截斷為整數 (00-99) 20
%d 月份中的日期,零填充 (01-31) 23
%D 簡短的 MM/DD/YY 日期,相當於 %m/%d/%y 08/23/01
%e 月份中的日期,空格填充 ( 1-31) 23
%F 簡短的 YYYY-MM-DD 日期,相當於 %Y-%m-%d 2001-08-23
%g 基於周的年份,最後兩位數字 (00-99) 01
%G 基於周的年份 2001
%h 縮寫月份名稱* (與 %b 相同) Aug
%H 24 小時制小時 (00-23) 14
%I 12 小時制小時 (01-12) 02
%j 一年中的日期 (001-366) 235
%m 月份作為十進位制數 (01-12) 08
%M 分鐘 (00-59) 55
%n 換行符 ('\n')
%p AM 或 PM 表示 PM
%r 12 小時制時間* 02:55:02 pm
%R 24 小時制 HH:MM 時間,相當於 %H:%M 14:55
%S 秒 (00-61) 02
%t 水平製表符 ('\t')
%T ISO 8601 時間格式 (HH:MM:SS),相當於 %H:%M:%S 14:55:02
%u ISO 8601 工作日,星期一為 1 (1-7) 4
%U 以第一個星期日為第一週的第一天計算的週數 (00-53) 33
%V ISO 8601 週數 (00-53) 34
%w 工作日,以星期日為 0 (0-6) 4
%W 以第一個星期一為第一週的第一天計算的週數 (00-53) 34
%x 日期表示* 08/23/01
%X 時間表示* 14:55:02
%y 年份,最後兩位數字 (00-99) 01
%Y 年份 2001
%z

ISO 8601 時區相對於 UTC 的偏移量 (1 分鐘 = 1,1 小時 = 100)

如果無法確定時區,則無字元

+100
%Z

時區名稱或縮寫*

如果無法確定時區,則無字元

CDT
%% 百分號 (%) %

返回值

未指定。此函式應僅用作流運算子。

錯誤透過修改流的內部狀態標誌來發出訊號:

標誌 錯誤
eofbit -
failbit 函式未能按 fmt 指定的格式化 tmb(如果 sentry 的構造失敗,也可能設定此標誌)。
badbit

流上的插入失敗,或發生其他錯誤(例如,當此函式捕獲內部操作丟擲的異常時)。

設定後,流的完整性可能受到影響。

異常

基本保證 − 如果丟擲異常,則物件處於有效狀態。

如果結果錯誤狀態標誌不是 goodbit,並且成員異常被設定為為此狀態丟擲,則它會丟擲一個成員型別為 failure 的異常。

內部操作丟擲的任何異常都會被函式捕獲並處理,並設定 badbit。如果在上次呼叫 exceptions 時設定了 badbit,則該函式會重新丟擲捕獲的異常。

資料競爭

訪問 tmb 指向的物件和 fmt 指向的陣列。

修改插入它的流物件。

對同一流物件的併發訪問可能會導致資料競爭,除非標準流物件 (cout、cerr、clog、wcout、wcerr 和 wclog) 與 stdio 同步(在這種情況下,不會啟動資料競爭,儘管不保證來自多個執行緒的字元的插入順序)。

示例

下面的例子解釋了 put_time 函式。

#include <iostream>
#include <iomanip>
#include <ctime>
#include <chrono>

int main () {
   using std::chrono::system_clock;
   std::time_t tt = system_clock::to_time_t (system_clock::now());

   struct std::tm * ptm = std::localtime(&tt);
   std::cout << "Now (local time): " << std::put_time(ptm,"%c") << '\n';

   return 0;
}
iomanip.htm
廣告