Python 为什么Datetime';s`.timestamp()`方法返回`OSError:[Errno 22]无效参数`?

Python 为什么Datetime';s`.timestamp()`方法返回`OSError:[Errno 22]无效参数`?,python,python-3.x,datetime,epoch,Python,Python 3.x,Datetime,Epoch,我在代码中使用了两次.timestamp()函数,将日期时间对象转换为纪元时间。对.timestamp()的第一次调用如下所示: import datetime origin_epoch = origin.timestamp() 变量origin和origin\u epoch的内容如下: 同时,如果我试图在代码的其他地方调用相同的方法 import datetime print(datetime.datetime(1900, 1, 1, 19, 6, 28).timestamp())

我在代码中使用了两次
.timestamp()
函数,将日期时间对象转换为纪元时间。对
.timestamp()
的第一次调用如下所示:

import datetime    
origin_epoch = origin.timestamp()
变量
origin
origin\u epoch
的内容如下:

同时,如果我试图在代码的其他地方调用相同的方法

import datetime
print(datetime.datetime(1900, 1, 1, 19, 6, 28).timestamp())
然后我得到以下错误:
OSError:[Errno 22]无效参数
这是为什么


编辑:此错误发生在Windows 10上。

1900年早于1970年,因此时间戳返回的秒数必须为负数。准确地说,但显然,你的情况不是这样。看起来您的操作系统只是将UNIX时代开始之前的日期视为错误

这在macOS上对我来说很好,不过:

>>> datetime.datetime(1900, 1, 1, 19, 6, 28).timestamp()
-2208929029.0
这似乎是一个应该已经修复的问题,但我还没有检查。在我的Windows(Windows 10,GMT+2)上,1970-01-02 02:00:00之前或3001-01-19 07:59:59之后的任何日期在调用
timestamp()
时都会出现
OSError

但是,这不会发生在偏移量感知日期时间上,而是计算为(从):

事实上,对于offset naive datetimes,可以简单地使用:

(dt - datetime(1970, 1, 1)).total_seconds()

哇,我怎么也猜不到。非常感谢!有趣的是,如果不指定年份,datetime模块中的默认年份是1900。因此,在windows上,无论何时在具有默认年份的datetime对象上运行
timestamp()
,程序都会因此“Errno 22”@David而崩溃,这可能也会有所帮助
(dt - datetime(1970, 1, 1)).total_seconds()