描述
该函数通过首先构造一个类型为 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 put_money用法及代码示例
- C++ iomanip setbase()用法及代码示例
- C++ iomanip setpricision()用法及代码示例
- C++ iomanip setiosflags()用法及代码示例
- C++ iomanip get_money用法及代码示例
- C++ iomanip setprecision()用法及代码示例
- C++ iomanip setprecision用法及代码示例
- C++ iomanip resetiosflags()用法及代码示例
- C++ iomanip setfill()用法及代码示例
- C++ iomanip resetiosflags用法及代码示例
- C++ iomanip setw()用法及代码示例
- C++ iomanip setiosflags用法及代码示例
- C++ iomanip setfill用法及代码示例
- C++ iomanip get_time用法及代码示例
- C++ iomanip setbases用法及代码示例
- C++ iomanip setw用法及代码示例
- C++ ios eof()用法及代码示例
- C++ ios manipulators boolalpha()用法及代码示例
- C++ ios Scientific用法及代码示例
- C++ ios manipulators left()用法及代码示例
注:本文由纯净天空筛选整理自 C++ iomanip Library - put_time Function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。