SuperIC社区_

标题: mktime函数计算误差一个小时 tm_isdst解决办法 [打印本页]

作者: icezhou    时间: 2016-5-31 14:37
标题: mktime函数计算误差一个小时 tm_isdst解决办法
在跟踪一个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(指定为夏令时)


作者: bean.yang    时间: 2016-6-1 14:40





欢迎光临 SuperIC社区_ (http://bbs.superic.com/) Powered by Discuz! X3.3