django一个匪夷所思的bug: 消失的时间?

 

今天同事告知, 在django中datetime.fromtimestamp(0)的时候, 竟然转成了 (1970,1,1,7,0)! 而不是(1970,1,1,8,0).

经测试发现:

 

1. 在开发机上正常, 在生产机上才有这个问题

2. python shell 中正常,  manage.py shell 中出现问题

 

怀疑django初始化时候对datetime动过手脚, 搜了一遍代码也没看出个所以然来. 测着测着, 突然发现, 执行

datetime.datetime.fromtimestamp(time.time())

正常! 尝试了一系列不同的时间戳, 找到了一个G点

中间这一个小时哪去了? 回头看, python shell中的数据正常.

估计time模块中的time.localtime也有这样的问题, 试验一下

嗯, 果然. 但是这消失的时间哪去了?

再试验一下time.mktime转下这时间

django一个匪夷所思的bug: 消失的时间?_第1张图片

 

Overflow! 我勒个擦.......

现在只能估计是 django 与 环境之间的冲突, 但还不能完全定位bug.

暂时要求大家使用utcfromtimestamp再加8自己转了.

========================================

后补:

找到一个http://stackoverflow.com/questions/6841333/why-is-subtracting-these-two-times-in-1927-giving-a-strange-result

里面描述了正好在某个时间点处时区有更改导致1小时之差的问题.

我擦django还有这么nb的功能, 赶紧google进行脑补, 我们设置的TIME_ZONE为 Asia/chongqing

最后发现

django一个匪夷所思的bug: 消失的时间?_第2张图片

 

时间吻合, 眼泪哗哗的啊.....

想看时区状况, 可去 http://www.timeanddate.com/

 

你可能感兴趣的:(django)