python - 时间戳超出平台 localtime()/gmtime() 函数的范围

标签 python datetime timestamp

我尝试:

ts = -216345600000
datetime.datetime.fromtimestamp(ts/1000)

ValueError:时间戳超出平台 localtime()/gmtime() 函数的范围

我检查 epochconverter 值:-216345600 返回 GMT:1963 年 2 月 23 日星期六 00:00:00 GMT

如何得到正确的结果?

最佳答案

对于许多值,比如太远的过去或 future ,只需将时间戳提供给 fromtimestamp() 就会报出超出范围的错误。但是,您可以使用相对于纪元的 timedelta() 来计算日期。

>>> from datetime import datetime, timedelta
>>> date = datetime(1970, 1, 1) + timedelta(seconds=-216345600)
>>> date
datetime.datetime(1963, 2, 23, 0, 0)
>>> date.strftime('%a, %d %b %Y %H:%M:%S GMT')
'Sat, 23 Feb 1963 00:00:00 GMT'

但是请注意,您不能使用它回到恐龙时代,因为 datetime() 仍然有它可以支持的最小值和最大值。

>>> datetime(1970, 1, 1) + timedelta(seconds=-62135596800)
datetime.datetime(1, 1, 1, 0, 0)
>>> datetime(1970, 1, 1) + timedelta(seconds=253402300799)
datetime.datetime(9999, 12, 31, 23, 59, 59)
>>> datetime(1970, 1, 1) + timedelta(seconds=253402300800)

Traceback (most recent call last):
  File "<pyshell#157>", line 1, in <module>
    datetime(1970, 1, 1) + timedelta(seconds=253402300800)
OverflowError: date value out of range

timedelta() 也有其局限性,但以纪元作为引用点,我们甚至还没有接近它们。

>>> timedelta(microseconds=1000000000*86400*10000-1)
datetime.timedelta(9999999, 86399, 999999)

关于python - 时间戳超出平台 localtime()/gmtime() 函数的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36179914/

相关文章:

SQL - 表设计 - DateCreated 和 DateUpdated 列

python matplotlib 以小时格式设置 xticks

python picamera,键盘 ctrl+c/sigint 未捕获

python - 如何为 GridSearchCV 提供用于交叉验证的索引列表?

Android/Joda 时间 - 将日期时间转换为我本地的日期时间

datetime - Flutter:DateTime.now 不反射(reflect)手动设置的时区

java - 使用Oracle日期字段中的cachedrowset时如何获取完整的日期和时间数据

python - 替换 pandas df 列名称中的字符串

python - 使用 urllib.urlopen() 无法获得网页的源代码

C# TryParseExact 读取时区