Unix时间相关的函数

本文详细介绍了C语言中处理时间的几种关键数据结构:time_t和struct tm。解释了time_t如何记录从1970年至今的秒数,以及struct tm如何存储具体的日期和时间信息。同时探讨了time()、gmtime()、localtime()和mktime()等函数的作用及使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

涉及到的数据结构

  • time_t,该对象中存放的是距离 1970-01-01 00:00:00 +0000 (UTC) 所经过的秒数.

  • struct tm,该对象中存放的是具体的日期值,包括年,月,日,时,分,秒,等等.如下:

struct tm {
    int tm_sec; /* 秒数,[0,60],取 60 的原因是可能存在润秒的缘故 */
    int tm_min; /* 分钟,[0,59] */
    int tm_hour;/* 小时,[0,23] */
    int tm_mday;/* 日期数,[1,31] */
    int tm_mon;/* 距离一月的月数,[0,11],即当为0时,表明是 1 月. */ 
    int tm_year;/* 距离 1900 所经过的年数,即当前实际年份为 tm_year+1900 */
    int tm_wday;/* 距离周日的天数,[0,6],即当为0时,表明是周日 */
    int tm_yday;/* 距离 1 月 1 号的天数,[0,365] */
    int tm_isdst;/* 是否是夏令时,若<0,表明该域信息不可用,若=0,表明没有采用夏令时,若>0,表明采用了夏令时 */
};

函数之间的关系

  • time(),从内核中取出当前时间,可以使用 gettimeofday() 获取更精确的时间.(参考 man 手册)

  • gmtime(),localtime(),将 time_t 类型的对象格式化为 struct tm 类型.(参考 man 手册)

  • mktime().将 struct tm 类型的对象格式化为 time_t 类型,该函数具体见下:

/**
 * 将 struct tm 类型格式化为 time_t 类型.
 * tm 作为输入/输出参数:
 * 在输入时,将忽略 tm_wday,tm_yday 域,并且若 tm_isdst<0,此时 mktime() 内部自己判断是否使用了夏令时,若 tm_isdst >0,表明采用了夏令时,否则未采用夏令时.
 * 在输出时,若 tm_sec,tm_min,...,tm_year 的值超出范围,则会规范化,如 10月40号会被规范为 11月9号;tm_wday,tm_yday 会重新计算.tm_isdst 会重新设置表明是否使用了夏令时.
 * 若 tm 包括的信息无法转化为 time_t 类型,则 tm 各域的值保持不变,并且返回 -1.
 */
time_t mktime(struct tm *tm);



转载于:https://my.oschina.net/u/1383479/blog/339767

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值