标准库:time
时间是我们在实践中经常需要的一个量,如果你想用C语言获取时间,你知道怎么做吗?今天我们就来谈谈这个问题。
C语言库标准库为我们提供了获取时间的一些函数,头文件是time.h,我们在使用时间相关函数需要将这个time.h包含进来。那么在讲时间函数之前,我们需要对一些时间的基本概念了解一下。
时间分类
GMT: Greenwich Mean Time,格林威治标准时间或格林威治平时,这个时间系统的概念在 1884 年确立,由英国伦敦的格林威治皇家天文台计算并维护,并在往后的几十年往欧陆其他国家扩散。在 1924 年开始,格林威治天文台每小时就会向全世界播报时间。
1884年10月在美国华盛顿召开了一个国际子午线会议,该会议将格林威治子午线设定为本初子午线,并将格林威治平时 (GMT, Greenwich Mean Time) 作为世界时间标准(UT, Universal
Time)。由此也确定了全球24小时自然时区的划分,所有时区都以和 GMT 之间的偏移量做为参考。
例如:GMT 12:00 就是指的是英国伦敦郊区的皇家格林尼治天文台当地的中午12:00,而GMT 8 12:00,则是指的东八区的北京当地时间的12:00。
UTC: Coordinated Universal Time Time,协调世界时,又称世界统一时间、世界标准时间、国际协调时间。由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。
UTC 是现在全球通用的时间标准,全球各地都同意将各自的时间进行同步协调。UTC 时间是经过平均太阳时(以格林威治时间GMT为准)、地轴运动修正后的新时标以及以秒为单位的国际原子时所综合精算而成。
UTC由两部分组成:
原子时间(TAI, International Atomic Time):
结合了全球400个所有的原子钟而得到的时间,它决定了我们每个人的钟表中,时间流动的速度。
世界时间(UT, Universal Time):
也称天文时间,或太阳时,他的依据是地球的自转,我们用它来确定多少原子时,对应于一个地球日的时间长度
DST: Daylight Saving Time, 夏令时又称夏季时间,或者夏时制;它是为节约能源而人为规定地方时间的制度。一般在天亮早的夏季人为将时间提前一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。
time函数
下面我们看下time.h提供了哪些获取时间的能力呢,time.h提供了三种时间:
CLOCKS_PER_SEC:宏,表示一秒经过的时钟数,在time.h这个数字为1000
time_t:日历时间,从一个时间点(例如:1970年1月1日0时0分0秒)到现在此时的秒数。
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代表一月) - 取值区间为[0,11] */
int tm_year; /* 年份,其值等于实际年份减去1900 */
int tm_wday; /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */
int tm_yday; /* 从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */
int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/
};
总结
通过这三种类型或变量,我们可以获得其他时间,具体参见下图,通过日历时间可以获得分解时间,通过分解时间我们可以获得固定时间格式的时间,同时,我们也可以通过日历时间调用函数strftime获得自定义时间格式的时间。
公众号:每日猿码
欢迎来撩
,