时间戳的最大值
我在Windows 10 x64上使用Python 3.6.0。
我刚刚发现在中time.ctime(seconds)
,seconds
参数具有一个隐式最大值,即32536799999,几乎等于2^34.92135
。
那是最大值吗?
错误消息只是说这是一个无效的数字。
>>> import time>>> time.ctime(32536799999)
>>> 'Mon Jan 19 15:59:59 3001'
>>> time.ctime(32536799999+1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 22] Invalid argument
我在Google上搜索并查看了Python文档,但没有找到任何有关它的信息。我将在实验室中的Ubuntu上检查此问题。
回答:
该time
文档没有提及任何限制,但是该datetime
文档包含:
fromtimestamp()``OverflowError
如果时间戳超出平台Clocaltime()
或gmtime()
功能支持的值范围,并且可能会OSError
打开localtime()
或gmtime()
失败,则可能会增加。[…]
datetime
假定朴素的实例代表本地时间,并且此方法依赖于平台Cmktime()
函数来执行转换。由于datetime
支持的值范围比mktime()
许多平台上的值更大,因此此方法可能会OverflowError
在过去或将来出现很多次。
然后我们转到Windows文档:
_localtime64
,使用该__time64_t
结构,允许日期以协调世界时(UTC)表示,直到3000年12月31日23:59:59,而_localtime32
代表截至UTC的2038年1月18日到23:59:59的日期。
localtime
是一个内联函数,其计算结果为_localtime64
,time_t
等效于__time64_t
。如果需要强制编译器将其解释time_t
为旧的32位time_t
,则可以定义_USE_32BIT_TIME_T
。这样做将导致localtime
评估为_localtime32
。不建议这样做,因为您的应用程序可能会在2038年1月18日之后失败,并且在64位平台上是不允许的。
所有与时间相关的功能(包括ctime
)都以相同的方式工作。因此,您可以在Windows
10上的时间戳之间可靠转换的最大日期是3000-12-31T23:59:59Z。
以上是 时间戳的最大值 的全部内容, 来源链接: utcz.com/qa/432461.html