在跟踪一个bug时发现,mktime与localtime转换的时间格式时间会相差一个小时。
原来在不同机器上会出现tm_isdst默认值不同。也就是说最终,不同tm结构体中的tm_isdst赋值,mktime算出来的时候会有一个小时的差别,这时候需要我们指定tm_isdst值。
#include <stdio.h>#include <time.h>int main(void){ tm maskTimetm; maskTimetm.tm_year= (2000-1900); maskTimetm.tm_mon = (1-1); maskTimetm.tm_mday= 1; maskTimetm.tm_hour= 0; maskTimetm.tm_min = 0; maskTimetm.tm_sec = 0; maskTimetm.tm_isdst = -1; time_t maskTime = mktime(&maskTimetm); return 0;}mktime是用于生成指定的本地时刻的,多数情况下我们都会忽略设置tm_isdst,.不过实际应用中发现,不同值会有不同影响. 下面是测试结果: tm中tm_isdst分别为0,1,-1对mktime结果影响会有一个小时的误差。 tm_isdst = -1(由系统判断) tm_isdst = 0(指定为非夏令时) tm_isdst = 1(指定为夏令时)
|