时间函数之间的关系
1 | struct tm |
1 |
|
1
2
struct tm * gmtime(const time_t * timep);
该函数将参数timep所指的time_t结构中的信息转换成真实世界所使用的日期表示方法,然后将结果由结构tm返回。该返回值代表目前的UTC时间。
1
2
struct tm * localtime(const time_t * timep);
该函数将参数timep所指的time_t结构中的信息转换成真实世界所使用的日期表示方法,然后将结果由结构tm返回。该返回值代表目前的当地时区的当地时间。
1
2
time_t mktime(struct tm * timeptr);
该函数将参数timeptr所指的tm结构数据转换成从公元1970年1月1日0时0分0秒算起的至今的UTC时间所经过的秒数。
1
2
size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
该函数将参数tm,依照参数format所指定的字符串格式做转换,转换后的字符串复制到参数s所指的字符串数组中,该字符串的最大长度为参数max所控制。
1
2
char *strptime(const char *s, const char *format, struct tm *tm);
该函数将参数s所指定的按一定格式要求编制的字符串,根据格式化参数format,转换成tm结构的值。如果分析错误,返回NULL。
strftime和strptime的格式参数
参数 | 含义 |
---|---|
%a | 星期几的简写 |
%A | 星期几的全称 |
%A | 星期几的全称 |
%b | 月分的简写 |
%B | 月份的全称 |
%c | 标准的日期的时间串 |
%C | 年份的前两位数字,比如1997年表示为:19 |
%d | 十进制表示的每月的第几天,表示法为:01-31 |
%D | 格式为“月/天/年”表示时间。相当于“%m%d%y”格式。例如“19970701” |
%e | 十进制表示的每月的第几天(不补0),表示法为:1-31。 |
%F | 使用“%Y-%m-%d”格式表示日期。例如“1997-07-01”。 |
%g | 年份的后两位数字,比如1997年表示为:97 |
%G | 完整的公元年份表示,比如1997年表示:1997 |
%h | 同“%b”一样,简写的月份名。 |
%H | 以24小时制表示小时数(00-23)。 |
%I | 以12小时制表示小时数(01-12)。 |
%j | 十进制表示一年中的天数(001-366)。 |
%k | 同“%H”,表示法为:0-23 |
%l | 同“%I”,表示法为:1-12。 |
%m | 十进制表示的月份,表示法:01-12。 |
%M | 十时制表示的分钟数,表示法:00-59。 |
%n | 同“\n”,换行。 |
%p | 本地AM或PM的等价显示。 |
%P | 同“%p”相似,但使用小写的am和pm来表示。 |
%r | 相当于使用“%I:%M:%S %p”格式,例如:“08:31:50 PM”。 |
%R | 相当于使用“%H:%M”格式,例如:“22:31”。 |
%S | 十进制的秒数,表示法:00-59。 |
%t | 水平制表符,同“\t” |
%T | 24小时时间表示,相当于“%H:%M:%S”格式。 |
%u | 一星期中的星期日期,范围:1-7,星期一从1开始。 |
%U | 一年中的星期数,范围:00-53,一月第一个星期日开始为01。 |
%V | 一年中的星期数,范围:00-53,一月第一个星期一开始为01。 |
%w | 一星期中的星期日期,范围:0-6,星期日从0开始。 |
%W | 一年中的星期数,范围:00-53,一月第一个星期一开始为01。 |
%x | 标准的日期串。比如2017年1月2日,表示成:”01/02/17”。 |
%X | 标准的时间串。比如2017年1月2日10点23分9秒,表示成:“10:23:09”。 |
%y | 不带世纪的十进制年份(值从0到99) |
%Y | 带世纪部分的十制年份 |
%z,%Z | 时区名称,如果不能得到时区名称则返回空字符。 |
%% | 百分号 |
关于%U参数:
比如2017年的1月1日是星期日,使用%U得到的值是“01”
比如2016年的1月1日是星期五,使用%U得到的值是“00”
关于%V参数:
比如2017年的1月1日是星期日,使用%V得到的值是“52”
比如2017年的1月1日是星期一,使用%V得到的值是“01”
比如2016年的1月1日是星期五,使用%V得到的值是“53”