当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。