现在的位置: 首页 > 综合 > 正文

夏令时对tm结构的影响

2012年04月24日 ⁄ 综合 ⁄ 共 840字 ⁄ 字号 评论关闭

夏令时不好玩,我觉的这东西完全是一个忽悠人的东西。美其名曰,节省能源。即使调了时间,难道就会提早睡了?我看未必,摄心术发生的作用罢了。

闲话少说,正传请看

夏令时百科:http://baike.baidu.com/view/100246.htm

在此不多说,只说对编程人员的影响

我的程序里,用到了日期转换,自己弄的转换函数,用意是把自己定义的结构体和tm、time_t之间进行转换,当然函数不止一个,而是一族函数,总共有好几个,用于之间的互相转换,方便程序的日期、时间操作。

这程序是用来播放录像文件的,程序完成,在我的电脑上可以正常播放,结果放到额度电脑上无法播放,同一个文件,同一个程序,这奇怪了。查看路径什么的也都正常。后来就在程序里添加打印信息,往下追了9层,终于发现了问题。夏令时在玩我。

另外一个信息,这日期、时间的操作函数是原来同事写好的,我只是在上面添加了一些新的接口而已,所以所有的逻辑都是按照之前写好的代码弄的。

其中有这么一个逻辑存在:先把自定义日期时间转换成time_t,然后加上指定秒数后再转换回来成一个新的日期时间。经过跟踪发现,这个转换出来的时间竟然提前了一个小时,而这一个小时,是给夏令时搞过去的。再看其它的函数,发现有的函数里没有对夏令时处理,而这个函数中却进行了处理。猜测应该就是这个不对称引起了问题。于是把所有夏令时的处理全部屏蔽掉,结果一试,可以播放了。

 

具体程序相关的

time_t ttCur = time(NULL);

tm *pt = localtime(&ttCur);

如果没有设置夏令时,则pt->tm_isdst为0,否则就为1.这个1是固定的,不会随时区的变化而变化。

有的时区有夏令时,而有的时区没有。中国没有,而其它的很多国家都有,比如山地时间(美国/加拿大时区)等等.

 

有夏令时的地区,一年的白天长的那段时间(一般可能是夏季和秋季)会被设置成夏令时时间,这个看上去无关痛痒的东西,却给编程带来了一些小麻烦,而且还会有时间重叠的现象发现,这就更麻烦了

抱歉!评论已关闭.