使用pd.to_datetime与datetime.fromtimestamp解析Unix时间戳结果不同,哪个正确?
Unix时间戳解析:两种方法结果不同的原因
我尝试用pd.to_datetime()和dt.datetime.fromtimestamp()解析同一个Unix时间戳,但输出结果不一样,请问哪种方式是正确的?代码示例如下:
import datetime as dt import pandas as pd ts = 1674853200000 print(pd.to_datetime(ts, unit='ms')) print(dt.datetime.fromtimestamp(ts / 1e3)) >> 2023-01-27 21:00:00 >> 2023-01-27 13:00:00
核心原因:时区差异
两种解析方式本身都没问题,结果不同完全是因为时区处理逻辑不一样:
pd.to_datetime()默认把时间戳解析成UTC标准时间(只要你没指定其他时区)dt.datetime.fromtimestamp()会自动转换成你运行代码的本地系统时区的时间
看你的输出,UTC时间21:00减去8小时就是13:00,说明你的本地时区是UTC-8(比如美国太平洋时区),两者的时间其实是同一个时刻,只是时区不同而已。
让结果统一的两种方法
- 让pandas输出本地时区时间:
# 先解析为UTC,再转换到你的本地时区(这里以UTC-8为例) print(pd.to_datetime(ts, unit='ms').tz_localize('UTC').tz_convert('America/Los_Angeles'))
- 让datetime输出UTC时间:
print(dt.datetime.utcfromtimestamp(ts / 1e3))
内容的提问来源于stack exchange,提问作者Scoodood
相关产品推荐
相关产品推荐

