Numpy datetime64 时间单位 - 从超过 4 年数字的字符串转换

Numpy datetime64 time units - conversion from string with more than 4 year digits

我在玩弄日期的极值并发现了一个奇怪的行为:

# 1. normal date in nanoseconds
print(np.datetime64('2020-04-14T00:00:00.000000', 'ns'))
# 2. extreme year date in nanoseconds
print(np.datetime64('-32020-04-14T00:00:00.000000', 'ns'))
# 3. extreme year date as year-month-day
print(np.datetime64('-32020-04-14T00:00:00.000000', 'D'))

给出:

2020-04-14T00:00:00.000000000
1884-06-01T23:24:35.153993728
-32020-04-14

我想知道为什么中间转换给出了一个完全错误的date/time?

因为np.datetime64[ns]是自1970-01-0100:00以来的64位整数纳秒数,所以它们只能表示[1678 AD, 2262 AD]范围内的日期。该范围之外的所有时间戳都被折叠到其中。

参考:numpy manual on Datetimes