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>頭中定義的類。

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