#include
time_t time(time_t *t);
此函数会返回从公元1970年1月1日的UTC时间从0时0分0秒算起到现在所经过的秒数。如果t 并非空指针的话,此函数也会将返回值存到t指针所指的内存。
struct tm
{int tm_sec;int tm_min;int tm_hour;int tm_mday;int tm_mon;int tm_year;int tm_wday;int tm_yday;int tm_isdst;
};
int tm_sec 代表目前秒数,正常范围为0-59,但允许至61秒 int tm_min 代表目前分数,范围0-59 int tm_hour 从午夜算起的时数,范围为0-23 int tm_mday 目前月份的日数,范围01-31 int tm_mon 代表目前月份,从一月算起,范围从0-11 int tm_year 从1900 年算起至今的年数 int tm_wday 一星期的日数,从星期一算起,范围为0-6 int tm_yday 从今年1月1日算起至今的天数,范围为0-365 int tm_isdst 日光节约时间的旗标。
一般localtime与timelocal(等同于mktime)互相转换
struct tm *localtime(const time_t *timep);
localtime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。此函数返回的时间日期已经转换成当地时区。
time_t mktime(strcut tm *timeptr);
time_t timelocal(strcut tm *timeptr);
mktime()用来将参数timeptr所指的tm结构数据转换成从公元1970年1月1日0时0分0 秒算起至今的UTC时间所经过的秒数。mktime一般计算当前时区的tm
一般gmtime 与timegm互相转换
struct tm *gmtime(const time_t *timep);
gmtime()将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法(UTC时间),然后将结果由结构tm返回
time_t timegm(strcut tm *timeptr);
与mktime不同的是入参tm此时为UTC时间而非本地时间
将时间格式转为tm结构体,因此注意这个字符串是本地时间字符串用mktime求时间戳,如果是UTC时间的话用timegm求时间戳
#include
...
struct tm tm;
time_t t;
if (strptime("6 Dec 2001 12:33:45", "%d %b %Y %H:%M:%S", &tm) == NULL)/* Handle error */;
printf("year: %d; month: %d; day: %d;\n",tm.tm_year, tm.tm_mon, tm.tm_mday);
printf("hour: %d; minute: %d; second: %d\n",tm.tm_hour, tm.tm_min, tm.tm_sec);
printf("week day: %d; year day: %d\n", tm.tm_wday, tm.tm_yday);
tm.tm_isdst = -1; /* Not set by strptime(); tells mktime()to determine whether daylight saving timeis in effect */
t = mktime(&tm);
if (t == -1)/* Handle error */;
printf("seconds since the Epoch: %ld\n", (long) t);"