根据https://www.runoob.com/cplusplus/cpp-date-time.html编写。
首先介绍2个数据类型。
一个是time_t,与时间函数相关的变量,定义的变量记录着自 1970 年 1 月 1 日以来经过的秒数,也称作时间戳。
另一个是结构体tm,
struct tm { int tm_sec; // 秒,范围从 0 到 59 int tm_min; // 分,范围从 0 到 59 int tm_hour; // 小时,范围从 0 到 23 int tm_mday; // 一月中的第几天,范围从 1 到 31 int tm_mon; // 月份,范围从 0 到 11 int tm_year; // 自 1900 起的年数 int tm_wday; // 一周中的第几天,范围从 0 到 6 int tm_yday; // 一年中的第几天,范围从 0 到 365 int tm_isdst; // 夏令时 };
然后是3个与时间处理相关的函数,
time_t time(time_t *time);
一般使用time(NULL)即可,可得到当前时区的时间戳。
struct tm *localtime(const time_t *timer);
将time_t类型转换为本地时间的 tm 结构的指针。
size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)
str -- 这是指向目标数组的指针,用来复制产生的 C 字符串。
maxsize -- 这是被复制到 str 的最大字符数。
format -- 这是 C 字符串,包含了普通字符和特殊格式说明符的任何组合。这些格式说明符由函数替换为表示 tm 中所指定时间的相对应值。
格式说明符:
说明符 |
含义 |
实例 |
%a |
缩写的星期几名称 |
Sun |
%A |
完整的星期几名称 |
Sunday |
%b |
缩写的月份名称 |
Mar |
%B |
完整的月份名称 |
March |
%c |
日期和时间表示法 |
Sun Aug 19 02:56:02 2012 |
%d |
一月中的第几天(01-31) |
19 |
%H |
24 小时格式的小时(00-23) |
14 |
%I |
12 小时格式的小时(01-12) |
05 |
%j |
一年中的第几天(001-366) |
231 |
%m |
十进制数表示的月份(01-12) |
08 |
%M |
分(00-59) |
55 |
%p |
AM 或 PM 名称 |
PM |
%S |
秒(00-61) |
02 |
%U |
一年中的第几周,以第一个星期日作为第一周的第一天(00-53) |
33 |
%w |
十进制数表示的星期几,星期日表示为 0(0-6) |
4 |
%W |
一年中的第几周,以第一个星期一作为第一周的第一天(00-53) |
34 |
%x |
日期表示法 |
08/19/12 |
%X |
时间表示法 |
02:50:06 |
%y |
年份,最后两个数字(00-99) |
01 |
%Y |
年份 |
2012 |
%Z |
时区的名称或缩写 |
CDT |
%% |
一个 % 符号 |
% |
4行代码实现在屏幕输出当前时间:
char str[50]; time_t now = time(NULL); strftime(str, 50, "%x %X", localtime(&now)); cout << str << endl;