转换自纪元至今的天数

问题描述 投票:0回答:3

如何将表示自纪元 (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:将纪元时间转换为日期时间不同,因为我从 1970 年以来的天数开始。由于闰秒等原因,我不确定是否可以乘以 86,400。

python date datetime epoch
3个回答
25
投票

使用

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"

5
投票

对于 Pandas 数据框:

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

...假设“日期”列包含类似

18687
的值,这是从 Unix 纪元
1970-01-01
2021-03-01
的天数。

还处理自 Unix Epoch 以来的秒和毫秒,分别使用

unit="s"
unit="ms"

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


0
投票
def serial_date_to_string(edays):
    date = (datetime.datetime(1970,1,1) + datetime.timedelta(days=edays-1))
    date_str = date.isoformat()[:10]
    return date_str

但我为此写了一个包。

pip install eday
,具有to_date功能:

import eday

def serial_date_to_string(edays):
    date = eday.to_date(edays-1)
    date_str = date.isoformat()[:10]
    return date_str
© www.soinside.com 2019 - 2024. All rights reserved.