此函数首先通过构造一个类型为basic_ostream::sentry的对象来访问输出序列。
然后(如果评估计算 sentry 对象为 true),它调用 time_put::put(使用流的选定区域设置)来执行格式化和插入操作,
相应地调整流的内部状态标志。 最后,它在返回之前销毁 sentry 对象。
它用于插入由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字符串作为格式字符串。它包含常规字符和特殊格式说明符的任意组合。这些格式说明符被函数替换为相应的值,以表示在tmb中指定的时间。
格式都以百分比(%)符号开头,如下所示 -
| 说明符 | 替换 | 示例 |
|---|---|---|
| %a | 工作日名称的缩写 * | Thu |
| %A | 完整工作日名称 * | Thursday |
| %b | 月份名称缩写 * | Aug |
| %B | 完整月份名称 * | August |
| %c | 日期和时间表示 | Thu Aug 23 14:55:02 2019 |
| %C | 年份除以100,并截断为整数(00-99) | 20 |
| %d | 月份中的某一天,用零填充(01-31) | 23 |
| %D | MM/DD/YY日期的简写,相当于%m/%d/%y | 08/23/19 |
| %e | 月份中的某日,空格填充(1-31) | 23 |
| %F | YYYY-MM-DD日期的简写,相当于%Y-%m-%d | |
| %g | 基于周的年份,后两位数字(00-99) | 01 |
| %G | 一年中周 | 2001 |
| %h | 月份名称的缩写(与%b相同) | Aug |
| %H | 24小时格式(00-23) | 14 |
| %I | 12小时格式(01-12) | 02 |
| %j | 一年中的某日(001-366) | 235 |
| %m | 月份的十进制数(01-12) | 08 |
| %M | 分钟(00-59) | 56 |
| %n | 新行字符('/n') |
|
| %p | 指定AM或PM | PM |
| %r | 12小时时钟时间 | 02:55:02 pm |
| %R | 24小时HH:MM时间,相当于%H:%M |
14:51 |
| %S | 秒(00-61) | 02 |
| %t | 水平制表符(’/t’) | |
| %T | ISO 8601时间格式 (HH:MM:SS),相当于%H:%M:%S |
|
| %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) | |
| %x | 日期的表示 | 08/23/01 |
| %X | 时间的表示 | 14:55:02 |
| %y | 年份,最后两位数字(00-99) | 01 |
| %Y | 年份,四位数字 | 2001 |
| %z | ISO 8601偏离UTC在时区(1分钟=1,1小时=100) | +100 |
| %Z | 时区名称或缩写 | CDT |
| %% | %符号 | % |
示例
下面的例子解释了 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;
}
上一篇:
std::get_time()函数
下一篇:
C++ <basic_ios>
