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;
}