std::put_time()函式


此函式首先通過構造一個型別為basic_ostream::sentry的物件來存取輸出序列。
然後(如果評估計算 sentry 物件為 true),它呼叫 time_put::put(使用流的選定區域設定)來執行格式化和插入操作,

相應地調整流的內部狀態標誌。 最後,它在返回之前銷毀 sentry 物件。

它用於插入由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 2019
%C 年份除以100,並截斷為整數(00-99) 20
%d 月份中的某一天,用零填充(01-31) 23
%D MM/DD/YY日期的簡寫,相當於%m/%d/%y 08/23/19
%e 月份中的某日,空格填充(1-31) 23
%F YYYY-MM-DD日期的簡寫,相當於%Y-%m-%d
%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) 56
%n 新行字元('/n'
%p 指定AM或PM PM
%r 12小時時鐘時間 02:55:02 pm
%R 24小時HH:MM時間,相當於%H:%M 14:51
%S 秒(00-61) 02
%t 水平製表符(’/t’)
%T ISO 8601時間格式 (HH:MM:SS),相當於%H:%M:%S
%u ISO 8601工作日,星期一的數位為11-7 4
%U 週數,以第一個星期日為第一週的第一天(00-53) 33
%V ISO 8601週編號(00-53) 34
%w 工作日,使用十進位制數,星期日為00-6 4
%W 週數,第一個星期一作為第一週的第一天(00-53)
%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
%% %符號 %

範例

下面的例子解釋了 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;
}