描述
該函數通過首先構造一個類型為 basic_ostream::sentry 的對象來訪問輸出序列。然後(如果評估哨兵對象為真),它調用 time_put::put(使用流的選定區域設置)來執行格式化和插入操作,相應地調整流的內部狀態標誌。最後,它在返回之前銷毀哨兵對象。
它用於插入 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-string 作為格式字符串。它包含常規字符和特殊格式說明符的任意組合。這些格式說明符被函數替換為相應的值,以表示 tmb 中指定的時間。
它們都以百分比 (%) 符號開頭,如下所示 -
說明符 | 取而代之 | 示例 |
---|---|---|
%a |
工作日縮寫名稱* | Thu |
%A |
工作日全名* | Thursday |
%b |
月份縮寫名稱* | Aug |
%B |
月份全名* | August |
%c |
日期和時間表示* | Thu Aug 23 14:55:02 2001 |
%C |
年份除以100,並截斷為整數(00-99 ) |
20 |
%d |
每月的某天,zero-padded(01-31 ) |
23 |
%D |
短的MM/DD/YY 日期,相當於%m/%d/%y |
08/23/01 |
%e |
每月的某天,以空格填充( 1-31 ) |
23 |
%F |
短的YYYY-MM-DD 日期,相當於%Y-%m-%d |
2001-08-23 |
%g |
以周為基礎的年份,後兩位數字(00-99 ) |
01 |
%G |
以周為基礎的年份 | 2001 |
%h |
縮寫的月份名稱*(與%b ) |
Aug |
%H |
小時以24小時製(00-23 ) |
14 |
%I |
12h格式的小時(01-12 ) |
02 |
%j |
一年中的某天(001-366 ) |
235 |
%m |
以十進製數字表示的月份(01-12 ) |
08 |
%M |
分鍾 (00-59 ) |
55 |
%n |
New-line個字符('\n' ) |
|
%p |
AM或PM指定 | PM |
%r |
12小時製* | 02:55:02 pm |
%R |
24小時HH:MM 時間,相當於%H:%M |
14:55 |
%S |
第二 (00-61 ) |
02 |
%t |
Horizontal-tab個字符('\t' ) |
|
%T |
ISO 8601時間格式(HH:MM:SS ), 相當於%H:%M:%S |
14:55:02 |
%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 ) |
34 |
%x |
日期表示* | 08/23/01 |
%X |
時間表示* | 14:55:02 |
%y |
年份,後兩位數字(00-99 ) |
01 |
%Y |
Year | 2001 |
%z |
ISO 8601與時區UTC的偏移量(1分鍾= 1、1小時= 100) 如果不能終止時區,則無字符 |
+100 |
%Z |
時區名稱或縮寫* 如果不能終止時區,則無字符 |
CDT |
%% |
A % 標誌 |
% |
返回值
未指定。此函數應僅用作流操縱器。
通過修改流的內部狀態標誌來發出錯誤信號 -
旗幟 | 錯誤 |
---|---|
eofbit | -- |
failbit | 函數格式化失敗tmb由調劑(如果構造的也可以設置哨兵失敗的)。 |
badbit | 流上的插入失敗,或者發生了其他一些錯誤(例如,當此函數捕獲內部操作拋出的異常時)。 設置後,流的完整性可能會受到影響。 |
異常
Basic guarantee- 如果拋出異常,則對象處於有效狀態。
如果產生的錯誤狀態標誌不是 goodbit 並且成員異常被設置為針對該狀態拋出,則它會拋出成員類型失敗的異常。
內部操作拋出的任何異常都由函數捕獲和處理,設置 badbit。如果在上次調用異常時設置了 badbit,則該函數將重新拋出捕獲的異常。
數據競爭
訪問 tmb 指向的對象和 fmt 指向的數組。
修改插入的流對象。
對同一個流對象的並發訪問可能會導致數據爭用,但標準流對象(cout、cerr、clog、wcout、wcerr 和 wclog)除外,當這些對象與 stdio 同步時(在這種情況下,不會發起數據爭用,盡管沒有保證來自多個線程的字符插入的順序)。
示例
在下麵的例子中解釋了 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;
}
相關用法
- C++ iomanip put_money用法及代碼示例
- C++ iomanip setbase()用法及代碼示例
- C++ iomanip setpricision()用法及代碼示例
- C++ iomanip setiosflags()用法及代碼示例
- C++ iomanip get_money用法及代碼示例
- C++ iomanip setprecision()用法及代碼示例
- C++ iomanip setprecision用法及代碼示例
- C++ iomanip resetiosflags()用法及代碼示例
- C++ iomanip setfill()用法及代碼示例
- C++ iomanip resetiosflags用法及代碼示例
- C++ iomanip setw()用法及代碼示例
- C++ iomanip setiosflags用法及代碼示例
- C++ iomanip setfill用法及代碼示例
- C++ iomanip get_time用法及代碼示例
- C++ iomanip setbases用法及代碼示例
- C++ iomanip setw用法及代碼示例
- C++ ios eof()用法及代碼示例
- C++ ios manipulators boolalpha()用法及代碼示例
- C++ ios Scientific用法及代碼示例
- C++ ios manipulators left()用法及代碼示例
注:本文由純淨天空篩選整理自 C++ iomanip Library - put_time Function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。