时间戳的最大值

我在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是一个内联函数,其计算结果为_localtime64time_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

回到顶部