函式
<iomanip>

std::put_time

template <class charT>/*unspecified*/ put_time (const struct tm* tmb, const charT* fmt);
輸出日期和時間
插入由 tmb 指向的物件所表示的日期和時間資訊,並根據引數 fmt 指定的格式進行格式化。

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

此操縱符在標頭檔案 <iomanip> 中宣告。

引數

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/%y08/23/01
%e月份中的日期,空格填充 ( 1-31)23
%F簡短的 YYYY-MM-DD 日期,等同於 %Y-%m-%d2001-08-23
%g基於周的年份,最後兩位數字 (00-99)01
%G基於周的年份2001
%h縮寫的月份名稱* (與 %b 相同)Aug
%H24 小時制的小時 (00-23)14
%I12 小時制的小時 (01-12)02
%j一年中的第幾天 (001-366)235
%m月份的十進位制數 (01-12)08
%M分鐘 (00-59)55
%n換行符 ('\n')
%pAM 或 PM 標識PM
%r12 小時制時鐘時間*02:55:02 pm
%R24 小時制 HH:MM 時間,等同於 %H:%M14:55
%S秒 (00-61)02
%t水平製表符 ('\t')
%TISO 8601 時間格式 (HH:MM:SS),等同於 %H:%M:%S14:55:02
%uISO 8601 星期幾,星期一為 1 (1-7)4
%U週數,第一個星期日為第一週的第一天 (00-53)33
%VISO 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
%zISO 8601 時區與 UTC 的偏移量(1 分鐘=1,1 小時=100)
如果無法確定時區,則不輸出任何字元
+100
%Z時區名稱或縮寫*
如果無法確定時區,則不輸出任何字元
CDT
%%一個 % 符號%
* 標有星號 (*) 的說明符依賴於區域設定。
還可以將兩個特定於區域設定的修飾符插入百分號 (%) 和說明符本身之間,以便在適用時請求替代格式
修飾符含義適用於
E使用區域設定的替代表示%Ec %EC %Ex %EX %Ey %EY
O使用區域設定的替代數字符號%Od %Oe %OH %OI %Om %OM %OS %Ou %OU %OV %Ow %OW %Oy
charT 是 C 字串中的字元型別。

返回值

未指定。此函式只應作為流操縱符使用(見示例)。

錯誤透過修改流的內部狀態標誌來指示。
flagerror
eofbit-
failbit該函式未能按 fmt 指定的方式格式化 tmb(如果 sentry 的構造失敗,也可能設定此標誌)。
badbit要麼插入到流的操作失敗,要麼發生了其他錯誤(例如,當此函式捕獲由內部操作丟擲的異常時)。
設定此標誌後,流的完整性可能受到影響。
一次操作可能設定多個標誌。

如果該操作在流上設定了一個使用其成員 exceptions 註冊的內部狀態標誌,則該函式將丟擲型別為 ios_base::failure 的異常。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// put_time example
#include <iostream>     // std::cout
#include <iomanip>      // std::put_time
#include <ctime>        // std::time_t, struct std::tm, std::localtime
#include <chrono>       // std::chrono::system_clock

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;
}


可能的輸出
Now (local time): 03/07/13 11:41:34


資料競爭

訪問由 tmb 指向的物件和由 fmt 指向的陣列。
修改插入到的流物件。
同時訪問相同的流物件可能會導致資料競爭,除非是標準流物件(coutcerrclogwcoutwcerrwclog),並且當這些物件與 stdio同步時(在這種情況下,不會引發資料競爭,儘管不保證來自多個執行緒的字元插入順序)。

異常安全

基本保證:如果丟擲異常,物件處於有效狀態。
如果最終的錯誤狀態標誌不是 goodbit 並且成員 exceptions 被設定為丟擲異常,則丟擲型別為 failure 的異常。
由內部操作丟擲的任何異常都將被該函式捕獲並處理,並設定 badbit。如果上一次呼叫 exceptions 時設定了 badbit,則該函式將重新丟擲捕獲到的異常。

請注意,無效引數會導致未定義行為

另見