datetime.datetime.utcfromtimestamp不支持小于1970的日期

时间:2018-04-16 15:10:56

标签: python datetime timestamp

我正在尝试构建一个应该处理自1830年以来获得的数据的程序。我创建了一个参考日期datetime(1970, 1, 1)来计算timedelta。

timedelta运作良好,我得到一些正常的负数。当我想重新转换日期以使用datetime.datetime.utcfromtimestamp(t)以适当的方式绘制数据时,会出现问题。所以这里“t”是否定的。

在互联网上寻找这个,我发现它是Windows下的Python错误或限制。我有3.5版本和Windows 10.我发现什么都没有帮助。所以,如果您知道使用熊猫图书馆或其他方式的解决方案,我将非常感激。

它返回给我的错误是:OSError: [Errno 22] Invalid argument

1 个答案:

答案 0 :(得分:0)

这似乎确实是您计算机上的错误。在我的机器上(Ubuntu 17.10中的Python 3.6.3),负数正确地作为UTC时间戳。

作为解决方法,您可以尝试datetime.datetime.toordinaldatetime.datetime.fromordinal。这些序数从0001年1月1日开始,因此只能使用正数覆盖您的日期范围:

import datetime

start = datetime.datetime(1830, 1, 1)
event_1 = datetime.datetime(1835, 2, 10)
diff = (event_1 - start).days
# 1866

datetime.datetime.fromordinal(start.toordinal() + diff)
# datetime.datetime(1835, 2, 10, 0, 0)