此函數首先通過構造一個類型為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工作日,星期一的數字為1 (1-7 ) |
4 |
%U | 周數,以第一個星期日為第一周的第一天(00-53) | 33 |
%V | ISO 8601周編號(00-53) | 34 |
%w | 工作日,使用十進位數,星期日為0 (0-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;
}
上一篇:
std::get_time()函數
下一篇:
C++ <basic_ios>