在linux中的时间有
time_t和struct tm
time_t的定义为type long time_t
time_t描述的时间是从1970年1月1日0时0分0秒到获取时间的那一秒的秒数。
函数time(NULL)可以获取当前的时间并以time_t的类型返回。
time_t 获取到的时间不够直观,为了直观地描述时间,采用了tm结构体的形式,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],0代表星期天,1代表星期1,以此类推*/
int tm_yday; /*从每年的1月1日开始的天数-取值区间为[0, 365],0代表1月1日*/
int tm_isdst; /*夏令时标识符,使用夏令时,tm_isdst为正,不使用夏令时,tm_isdst为0,不了解情况时,tm_isdst为负*/
}
tm *localtime(time_t *p)
tm * gmtime(time_t *p)
两个函数都可以把time_t类型的函数转换成为tm结构体
localtime函数是转换成为本地的时间,而gmtime则是转换成为格林治时间
time_t mktime (struct tm * p_tm)
可以将struct tm 结构体类型的函数转换成为time_t的类型
示例:
#include <time.h>
#include <stdio.h>
int main() {
char *wday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
time_t t = time(NULL); // 获取当前时间 printf("time_t = %ld\n\n", t);
struct tm *tt = gmtime(&t); // 转换成格林尼治时间 printf("gmtime:\n");
printf("%d-%d-%d ", (tt->tm_year+1900), (tt->tm_mon+1), tt->tm_mday);
printf("%s %d:%d:%d\n\n", wday[tt->tm_wday], tt->tm_hour, tt->tm_min, tt->tm_sec);
tt = localtime(&t); // 转换成当地时间 printf("localtime:\n");
printf("%d-%d-%d ", (tt->tm_year+1900), (tt->tm_mon+1), tt->tm_mday);
printf("%s %d:%d:%d\n\n", wday[tt->tm_wday], tt->tm_hour, tt->tm_min, tt->tm_sec);
time_t ttt = mktime(tt); // 将当地时间转换回 time_t 类型 printf("mktime:\n");
printf("time_t = %ld\n", ttt); return 0;}