如何将表示自纪元(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等。
答案 0 :(得分:9)
使用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")
这是一个根据需要返回字符串的函数。
所以:
serial_date_to_string(15951)
返回
>> "2013-09-02"
答案 1 :(得分:1)
对于 Pandas 数据框:
df["date"] = pd.to_datetime(df["date"], unit="d")
... 假设“日期”列包含像 18687
这样的值,它是从 1970-01-01
的 Unix Epoch 到 2021-03-01
的天数。
还处理自 Unix Epoch 以来的秒和毫秒,分别使用 unit="s"
和 unit="ms"
。