今天同事告知, 在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转下这时间
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
最后发现
时间吻合, 眼泪哗哗的啊.....
想看时区状况, 可去 http://www.timeanddate.com/