linux编程中的时间

来源:互联网 发布:淘宝店铺可以租吗 编辑:程序博客网 时间:2024/05/22 05:29

在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);return0;}