时间戳的最大值

发布于 2021-01-29 16:26:16

我在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上检查此问题。

关注者
0
被浏览
150
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    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。

    试图获得独立于平台的最大时间戳是困难的



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看