为何Python datetime与pandas to_datetime转换同一时间戳结果不同?
为什么两种时间戳转换方法结果有8小时差异?
这个差异的核心原因是两个方法默认使用的时区不同,具体拆解如下:
对于
pd.to_datetime(1523808011.979, unit='s'):
pandas 默认将Unix时间戳(以秒为单位)解析为UTC时区的时间,返回的是不带时区标记的Timestamp对象(naive timestamp)。你得到的2018-04-15 16:00:11.979000其实是UTC标准时间。对于
dt.datetime.fromtimestamp(1523808011.979).isoformat():
Python标准库的datetime.fromtimestamp()默认会用你的本地系统时区解析时间戳。从结果反推,你的系统时区应该是东八区(UTC+8)——把UTC时间16:00加上8小时,就得到了次日的00:00:11.979,也就是2018-04-16T00:00:11.979000。
验证&统一结果的方法
如果想让两个方法返回一致的结果,可以做如下调整:
- 让pandas适配本地时区解析:
import pandas as pd # 先解析为UTC,再转换到东八区(以上海时区为例) pd.to_datetime(1523808011.979, unit='s').tz_localize('UTC').tz_convert('Asia/Shanghai') # 结果会是 Timestamp('2018-04-16 00:00:11.979000+0800', tz='Asia/Shanghai')
- 让datetime用UTC时区解析:
import datetime as dt dt.datetime.utcfromtimestamp(1523808011.979).isoformat() # 结果会是 '2018-04-15T16:00:11.979000',和pandas初始结果一致
内容的提问来源于stack exchange,提问作者Xiang Yang
相关产品推荐
相关产品推荐

