问题描述
我在 Windows 10 x64 上使用 Python 3.6.0.
I am using Python 3.6.0 on Windows 10 x64.
我刚刚发现在time.ctime(seconds)
中,seconds
参数有一个隐含的最大值,即32536799999,几乎等于2^34.92135代码>.
I just found that in time.ctime(seconds)
, seconds
parameter has an implicit maximum value, which is 32536799999, almost equals to 2^34.92135
.
这是最大值吗?
错误消息只是说这是一个无效的数字.
The error message just says it's an invalid number.
>>> 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
我用谷歌搜索并查看了 Python 文档,但没有找到任何相关信息.我将在实验室的 Ubuntu 上检查这个问题.
I googled and looked on Python documentation, but I didn't find anything about it. And I'm going to check this problem on Ubuntu in my lab.
推荐答案
time
文档没有提到任何限制,但是 datetime
文档:
The time
documentation doesn't mention any limits, but the datetime
documentation does:
fromtimestamp()
可能会引发 OverflowError
,如果时间戳超出平台 C localtime()
支持的值范围,或者gmtime()
函数,以及 localtime()
或 gmtime()
失败时的 OSError
.
[...]
Naive datetime
实例被假定为表示本地时间,并且此方法依赖于平台 C mktime()
函数来执行转换.由于 datetime
在许多平台上支持比 mktime()
更广泛的值,因此此方法可能会在过去很长时间或很远的时间内引发 OverflowError
未来.
Naive datetime
instances are assumed to represent local time and this method relies on the platform C mktime()
function to perform the conversion. Since datetime
supports wider range of values than mktime()
on many platforms, this method may raise OverflowError
for times far in the past or far in the future.
然后我们转到 Windows 文档:
_localtime64
使用 __time64_t
结构,允许将日期表示为 3000 年 12 月 31 日 23:59:59,协调世界时 (UTC),而 _localtime32
表示截至 2038 年 1 月 18 日 23:59:59 的日期,UTC.
localtime
是一个内联函数,其计算结果为 _localtime64
,而 time_t
等价于 __time64_t
.如果您需要强制编译器将 time_t
解释为旧的 32 位 time_t
,您可以定义 _USE_32BIT_TIME_T
.这样做会导致 localtime
计算为 _localtime32
.不建议这样做,因为您的应用程序可能会在 2038 年 1 月 18 日之后失败,并且在 64 位平台上是不允许的.
localtime
is an inline function which evaluates to _localtime64
, and time_t
is equivalent to __time64_t
. If you need to force the compiler to interpret time_t
as the old 32-bit time_t
, you can define _USE_32BIT_TIME_T
. Doing this will cause localtime
to evaluate to _localtime32
. This is not recommended because your application may fail after January 18, 2038, and it is not allowed on 64-bit platforms.
所有与时间相关的函数(包括ctime
)都以相同的方式工作.因此,您可以在 Windows 10 上的时间戳之间可靠地转换的最大日期是 3000-12-31T23:59:59Z.
All the time-related functions (including ctime
) work the same way. So the max date you can reliably convert between timestamps on Windows 10 is 3000-12-31T23:59:59Z.
试图获得独立于平台的最大时间戳很困难.
Trying to get a platform-independent max timestamp is difficult.
这篇关于时间戳最大值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!