搜索
 找回密码
 立即注册

简单一步 , 微信登陆

mktime函数计算误差一个小时 tm_isdst解决办法

作者:icezhou | 时间:2016-5-31 14:37:41 | 阅读:3883| 显示全部楼层
在跟踪一个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(指定为夏令时)

该会员没有填写今日想说内容.
回复

使用道具 举报

大神点评1

bean.yang 发表于:2016-6-1 14:40:24
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册
手机版