當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


C++ iomanip put_time用法及代碼示例


描述

該函數通過首先構造一個類型為 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 Library - put_time Function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。