You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中datetime.utcfromtimestamp时间偏移问题:仅改指定行修复

问题

我有一个表示UTC时间的字符串ts,希望将其转换为整数时间戳后,使用datetime.utcfromtimestamp恢复为原时间。现有代码如下:

ts = '2023-07-10 14:06:22.000 UTC'
int_ts = int(datetime.strptime(ts, "%Y-%m-%d %H:%M:%S.%f %Z").timestamp() * 1000) # 仅可修改此行
back_to_ts = datetime.utcfromtimestamp(int_ts / 1000)
print(f"{back_to_ts = }, {ts = }, {int_ts = }")

当前输出为:

back_to_ts = datetime.datetime(2023, 7, 10, 12, 6, 22), ts = '2023-07-10 14:06:22.000 UTC', int_ts = 1688990782000

期望输出为:

back_to_ts = datetime.datetime(2023, 7, 10, 14, 6, 22), ts = '2023-07-10 14:06:22.000 UTC', int_ts = 1688990782000

仅允许修改第二行代码,应如何调整以实现期望输出?

解决方案

问题根源在于:datetime.strptime解析带%Z的UTC字符串时,生成的是未标记时区的naive datetime对象,调用timestamp()方法时会将其当作本地时区时间处理,导致时间戳计算出现偏移。

修改第二行代码,为解析后的datetime对象显式添加UTC时区标记,再计算时间戳:

int_ts = int(datetime.strptime(ts, "%Y-%m-%d %H:%M:%S.%f %Z").replace(tzinfo=datetime.timezone.utc).timestamp() * 1000)

关键说明

  • replace(tzinfo=datetime.timezone.utc):将naive datetime转换为带UTC时区标记的aware datetime,确保后续时间戳计算基于UTC标准。
  • 此时生成的时间戳能准确对应原UTC字符串的时间,用datetime.utcfromtimestamp恢复时,就能得到与原字符串一致的UTC时间。

修改后运行代码,输出将完全符合期望:

back_to_ts = datetime.datetime(2023, 7, 10, 14, 6, 22), ts = '2023-07-10 14:06:22.000 UTC', int_ts = 1688990782000

内容的提问来源于stack exchange,提问作者David Masip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 22:05:20