如何将UTC值转换为纽约/东部时区?pandas时区转换问题排查
问题原因与解决方法
核心认知纠正
epoch 时间戳本身是基于UTC时区的绝对时间值,没有自带时区属性。你用pd.to_datetime(final_df['t'], unit='ms')得到的是无时区标记的naive datetime对象,你看到结果显示为UTC-4,是你当前运行环境默认用本地UTC-4时区渲染了这个无时区对象,不是转换逻辑出错。
另外纽约时区实行夏令时/冬令时切换,夏令时对应UTC-4,冬令时对应UTC-5,用America/New_York做时区转换是正确写法,不要硬编码固定偏移量,否则换季时会出现时间错误。
代码无输出的常见原因
你写的时区转换逻辑本身是正确的,运行后无输出也不报错,基本是以下几个原因:
- 运行.py脚本时,这行代码不在实际执行路径上:比如被分支判断跳过、写在未被调用的函数/类方法里
- 在Jupyter类交互环境运行时,对应单元格没有被实际执行,或者
time_stamp变量之前被覆盖成了非预期的空值/其他类型 - pandas/pytz版本过低,时区操作存在静默失败的bug,升级两个库到较新版本即可修复
正确可运行代码
import pandas as pd # 转换epoch毫秒为无时区datetime,基准默认是UTC time_stamp = pd.to_datetime(final_df['t'], unit='ms') # 先标记时区为UTC,再转换为纽约时区 ny_time = time_stamp.tz_localize('UTC').tz_convert('America/New_York') # 打印结果验证 print(ny_time)
以你给出的第一个时间戳1654769460000为例,转换后得到的纽约时间是2022-06-09 06:11:00-04:00,符合当时纽约夏令时的偏移。
内容的提问来源于stack exchange,提问作者a7dc
相关产品推荐
相关产品推荐

