Ben*_*oît 11 python timezone pypy mktime
我想弄清楚1984年3月16日有什么特别之处.在我使用的虚拟机上(没有什么特别之处),Python(以及PyPy)在尝试使用mktime时崩溃了,这似乎是一个非常合理的时间结构.
$ pypy
Python 2.7.3 (f66246c46ca30b26a5c73e4cc95dd6235c966b8f, Jul 30 2013, 09:27:06)
[PyPy 2.0.2 with GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>> import time
>>>> time.mktime((1984,3,16,0,0,0,0,0,0))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: mktime argument out of range
>>>> time.mktime((1984,3,15,0,0,0,0,0,0))
448156800.0
>>>> time.mktime((1984,3,17,0,0,0,0,0,0))
448326000.0
>>>> time.mktime((1984,3,16,0,0,0,0,0,0))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: mktime argument out of range
>>>>
Run Code Online (Sandbox Code Playgroud)
为什么以及可以做些什么来避免这个问题?
虽然问题确实每次都发生在这个VM上,但我无法让它在任何其他VM上发生.
鉴于448326000.0和448156800.0之间的差异为47小时而非48小时,您的机器认为1984年3月15日午夜到1984年3月17日午夜之间有夏令时过渡.
但据我所知,法国当天没有发生这种转变.而且我不确定你如何修复操作系统对历史性夏令时转换的解释.
啊哈!神秘解决了(因为OP终于找出了"出错"的时区).我找到了这个:
http://www.timeanddate.com/worldclock/timezone.html?n=60&syear=1980
1980 No time changes
1981 No time changes
1982 No time changes
1983 No time changes
1984 Time zone change on Friday, March 16, 1984 at 1:00:00 AM
1985 Time zone change on Tuesday, December 31, 1985 at 11:00:00 PM
1986 No time changes
1987 No time changes
1988 No time changes
1989 No time changes
Run Code Online (Sandbox Code Playgroud)
所以,我想"1984年3月16日发生的事情"的答案是卡萨布兰卡在当天凌晨1点改变了时间.:)
从技术上讲,它立即从午夜跳到凌晨1点,所以从00:00开始到01:00之前的所有时间都会产生相同的错误.也就是说,我的猜测是,time.mktime((1984,3,16,1,0,0,0,0,0))更大的会起作用,但是,例如,time.mktime((1984,3,16,0,59,0,0,0,0))不会.
| 归档时间: |
|
| 查看次数: |
593 次 |
| 最近记录: |