给出以下代码:
value = time.mktime(datetime.fromtimestamp(timestamp).timetuple())
是否有可能产生OverflowError'mktime参数超出范围',如果是,那么什么范围的时间戳会导致这种情况?
答案 0 :(得分:3)
是。我比UTC和Windows早两个小时。我在int32范围的最后两个小时内得到错误:
>>> def roundtrip(x):
... return time.mktime(datetime.datetime.fromtimestamp(x).timetuple())
...
>>> roundtrip(2**31-1-7200)
2147476447.0
>>> roundtrip(2**31-7200)
OverflowError: mktime argument out of range
>>> roundtrip(2**31-1)
OverflowError: mktime argument out of range
>>> roundtrip(2**31)
ValueError: timestamp out of range for platform time_t
答案 1 :(得分:1)
注意:你问的方式,我想没有可能的时间戳会触发你正在寻找的特定异常,因为datetime.fromtimestamp
会引发ValueError
,因为它是(可能)受到相同的限制。
现在,mktime
的范围取决于平台,因此我无法给出明确的答案。在我的Linux 32位计算机中,边界在带符号的32位整数内,因此转换为小于-2147483648(即在(1901, 12, 13, 19, 44, 16)
之前)或过去2147483647或(2038, 1, 19, 3, 14, 7)
的元组将触发该异常......但是,对你来说,datetime.fromtimestamp
会更早地抓住它。