目录

put_time

描述 (Description)

此函数首先构造一个basic_ostream :: sentry类型的对象来访问输出序列。 然后(如果评估sentry对象为true),它调用time_put :: put(使用流的选定语言环境)来执行格式化和插入操作,相应地调整流的内部状态标志。 最后,它会在返回之前摧毁哨兵对象。

它用于插入tmb指向的时间和日期信息的表示,并按参数fmt指定格式化。

声明 (Declaration)

以下是std :: put_time函数的声明。

template <class charT>
/*unspecified*/ put_time (const struct tm* tmb, const charT* fmt);

参数 (Parameters)

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 2001
%C 年除以100并截断为整数( 00-99 ) 20
%d 零日填充( 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一天( 001-366 ) 235
%m 月份为十进制数字( 01-12 ) 08
%M 分钟( 00-59 ) 55
%n 换行符( '\n' )
%p AM或PM指定 PM
%r 12小时制时间* 02:55:02 pm
%R 24小时HH:MM时间,相当于%H:%M 14:55
%S 第二( 00-61 ) 02
%t 水平制表符( '\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
%% %符号 %

返回值 (Return Value)

未指定。 此功能仅应用作流操纵器。

通过修改流的内部状态标志来发出错误信号 -

错误
eofbit -
failbit 该函数无法格式化fmt指定的tmb (如果哨兵的构造失败,也可以设置它)。
badbit

流上的插入失败,或者发生了其他一些错误(例如当此函数捕获内部操作抛出的异常时)。

设置后,流的完整性可能已受到影响。

异常 (Exceptions)

Basic guarantee - 如果抛出异常,则对象处于有效状态。

如果生成的错误状态标志不是goodbit并且成员异常被设置为针对该状态抛出,则会抛出成员类型失败的异常。

内部操作抛出的任何异常都由函数捕获和处理,设置badbit。 如果在最后一次调用异常时设置了badbit,则该函数会重新捕获捕获的异常。

数据竞争 (Data races)

访问tmb指向的对象和fmt指向的数组。

修改插入它的流对象。

当与stdio同步时,对标准流对象(cout,cerr,clog,wcout,wcerr和wclog)除外,对同一流对象的并发访问可能导致数据争用(在这种情况下,没有启动数据争用,尽管没有保证按插入多个线程的字符的顺序给出。

例子 (Example)

在下面的例子中解释了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;
}
↑回到顶部↑
WIKI教程 @2018