将纪元以来的天数转换为日期

Converting days since epoch to date

如何将表示自纪元 (1970) 以来的天数的日期序列号转换为相应的日期字符串?我已经看到多篇文章展示了如何从字符串到日期数字,但我找不到任何关于如何进行反向操作的文章。

例如15951对应"2013-09-02".

>>> import datetime
>>> (datetime.datetime(2013, 9, 2) - datetime.datetime(1970,1,1)).days + 1
15951

+ 1 因为无论生成这些日期数字的是什么,都遵循 1970 年 1 月 1 日 = 1 的约定。)

TL;DR:正在寻找可以执行以下操作的内容:

>>> serial_date_to_string(15951)  # arg is number of days since 1970
"2013-09-02"

这与 Python: Converting Epoch time into the datetime 不同,因为我从 1970 年以来的天数开始。由于闰秒等原因,我不确定您是否可以乘以 86,400

使用datetime包如下:

import datetime
def serial_date_to_string(srl_no):
    new_date = datetime.datetime(1970,1,1,0,0) + datetime.timedelta(srl_no - 1)
    return new_date.strftime("%Y-%m-%d")

这是一个returns需要字符串的函数。

所以:

serial_date_to_string(15951)

Returns

>> "2013-09-02"

对于 Pandas 数据框:

df["date"] = pd.to_datetime(df["date"], unit="d")

...假设“日期”列包含像 18687 这样的值,它是从 1970-01-01 的 Unix 纪元到 2021-03-01.

的天数

还处理自 Unix Epoch 以来的秒数和毫秒数,分别使用 unit="s"unit="ms"

另见我的