此函數(shù)首先通過構(gòu)造一個(gè)類型為basic_ostream::sentry的對(duì)象來訪問輸出序列。
然后(如果評(píng)估計(jì)算 sentry 對(duì)象為 true),它調(diào)用 time_put::put(使用流的選定區(qū)域設(shè)置)來執(zhí)行格式化和插入操作,
相應(yīng)地調(diào)整流的內(nèi)部狀態(tài)標(biāo)志。 最后,它在返回之前銷毀 sentry 對(duì)象。
它用于插入由tmb指向的時(shí)間和日期信息的表示,根據(jù)參數(shù)fmt指定來格式化。
以下是 std::put_time 函數(shù)的聲明。
template <class charT>
/*unspecified*/ put_time (const struct tm* tmb, const charT* fmt);
tmb ? 指向類型struct tm的對(duì)象的指針,具有格式化的日期和時(shí)間信息。 struct tm是<ctime>頭中定義的類。
fmt ? time_put::put 使用C字符串作為格式字符串。它包含常規(guī)字符和特殊格式說明符的任意組合。這些格式說明符被函數(shù)替換為相應(yīng)的值,以表示在tmb中指定的時(shí)間。
格式都以百分比(%)符號(hào)開頭,如下所示 -
| 說明符 | 替換 | 示例 |
|---|---|---|
| %a | 工作日名稱的縮寫 * | Thu |
| %A | 完整工作日名稱 * | Thursday |
| %b | 月份名稱縮寫 * | Aug |
| %B | 完整月份名稱 * | August |
| %c | 日期和時(shí)間表示 | Thu Aug 23 14:55:02 2019 |
| %C | 年份除以100,并截?cái)酁檎麛?shù)(00-99) | 20 |
| %d | 月份中的某一天,用零填充(01-31) | 23 |
| %D | MM/DD/YY日期的簡(jiǎn)寫,相當(dāng)于%m/%d/%y | 08/23/19 |
| %e | 月份中的某日,空格填充(1-31) | 23 |
| %F | YYYY-MM-DD日期的簡(jiǎn)寫,相當(dāng)于%Y-%m-%d | |
| %g | 基于周的年份,后兩位數(shù)字(00-99) | 01 |
| %G | 一年中周 | 2001 |
| %h | 月份名稱的縮寫(與%b相同) | Aug |
| %H | 24小時(shí)格式(00-23) | 14 |
| %I | 12小時(shí)格式(01-12) | 02 |
| %j | 一年中的某日(001-366) | 235 |
| %m | 月份的十進(jìn)制數(shù)(01-12) | 08 |
| %M | 分鐘(00-59) | 56 |
| %n | 新行字符('/n') |
|
| %p | 指定AM或PM | PM |
| %r | 12小時(shí)時(shí)鐘時(shí)間 | 02:55:02 pm |
| %R | 24小時(shí)HH:MM時(shí)間,相當(dāng)于%H:%M |
14:51 |
| %S | 秒(00-61) | 02 |
| %t | 水平制表符(’/t’) | |
| %T | ISO 8601時(shí)間格式 (HH:MM:SS),相當(dāng)于%H:%M:%S |
|
| %u | ISO 8601工作日,星期一的數(shù)字為1(1-7) |
4 |
| %U | 周數(shù),以第一個(gè)星期日為第一周的第一天(00-53) | 33 |
| %V | ISO 8601周編號(hào)(00-53) | 34 |
| %w | 工作日,使用十進(jìn)制數(shù),星期日為0(0-6) |
4 |
| %W | 周數(shù),第一個(gè)星期一作為第一周的第一天(00-53) | |
| %x | 日期的表示 | 08/23/01 |
| %X | 時(shí)間的表示 | 14:55:02 |
| %y | 年份,最后兩位數(shù)字(00-99) | 01 |
| %Y | 年份,四位數(shù)字 | 2001 |
| %z | ISO 8601偏離UTC在時(shí)區(qū)(1分鐘=1,1小時(shí)=100) | +100 |
| %Z | 時(shí)區(qū)名稱或縮寫 | CDT |
| %% | %符號(hào) | % |
下面的例子解釋了 put_time 函數(shù)的使用。
#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;
}