我有以下几点:
import pandas as pd
import io
s = pd.read_csv(
io.StringIO(",Unnamed: 0,date\n0,0,13837781820.0\n1,1,13837781880.0\n")
)["date"]
我不知道日期应该是什么,除了
pd.to_datetime(s)
返回
0 1970-01-01 00:00:13.837781820
1 1970-01-01 00:00:13.837781880
Name: date, dtype: datetime64[ns]
这是错误的。
from datetime import datetime
datetime.fromtimestamp(s[0])
返回
datetime.datetime(2408, 7, 2, 13, 17)
这是错误的。
添加一些更具体的东西 -
我希望:
13838574120.0
转换为
2021-04-23 16:22:00
答案 0 :(得分:1)
如果我的猜测是正确的,那么您所拥有的是从 1582 年 10 月 14 日开始的秒数。在 Unix 世界中表示日期的常用方法是从 1.1 月 1970 年开始的秒数,因此如果我们可以在秒,我们可以从您拥有的数字中减去该数字,然后从那里取出。
为了找到不同之处,我们可以坐下来拿着纸笔认真思考闰年规则,或者我们可以让计算机为我们完成工作:
import datetime
# This really should be zero, but just for good measure...
unix_epoch = datetime.datetime(1970, 1, 1, tzinfo=datetime.timezone.utc)
assert unix_epoch.timestamp() == 0
lilian_epoch = datetime.datetime(1582, 10, 14, tzinfo=datetime.timezone.utc)
delta = unix_epoch.timestamp() - lilian_epoch.timestamp()
现在让我们用您的样品日期试试
print(datetime.datetime.fromtimestamp(13838574120.0 - delta))
# prints 2021-04-23 18:22:00
为什么要休息两个小时?我在斯德哥尔摩,fromtimestamp
给出了当地时间,但时间戳值应该是 UTC。你必须以某种方式调整时区。
答案 1 :(得分:0)