转换自纪元以来的日期

pau*_*ult 4 python datetime date epoch

如何将表示自纪元(1970年)以来的天数的序列日期编号转换为相应的日期字符串?我看过多个帖子显示如何从字符串到日期编号,但我无法找到任何关于如何反向的帖子.

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

>>> import datetime
>>> (datetime.datetime(2013, 9, 2) - datetime.datetime(1970,1,1)).days + 1
15951
Run Code Online (Sandbox Code Playgroud)

(+ 1因为无论生成这些日期数字的是什么,遵循1970年1月1日= 1的惯例.)

TL; DR:寻找要做的事情:

>>> serial_date_to_string(15951)  # arg is number of days since 1970
"2013-09-02"
Run Code Online (Sandbox Code Playgroud)

这与Python不同:将大纪元时间转换为日期时间,因为我从1970年以来的几天开始.我不确定你是否可以因闰秒等而乘以86,400等.

AER*_*AER 10

使用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")
Run Code Online (Sandbox Code Playgroud)

这是一个根据需要返回字符串的函数.

所以:

serial_date_to_string(15951)
Run Code Online (Sandbox Code Playgroud)

返回

>> "2013-09-02"
Run Code Online (Sandbox Code Playgroud)

  • 小心-1。该答案与问题一样,假设第 1 天为 1970 年 1 月 1 日,第 0 天为 1969 年 12 月 31 日。如果您希望 1970-01-01 为第 0 天,请从函数中删除 -1。 (2认同)

Con*_*ngo 5

对于 Pandas 数据框:

df["date"] = pd.to_datetime(df["date"], unit="d")
Run Code Online (Sandbox Code Playgroud)

...假设“日期”列包含类似18687Unix Epoch 到 的天数之类的1970-01-012021-03-01

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

另请参阅我的其他答案,与此完全相反