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

UTC时间串转Unix时间戳再转回后结果不一致的技术问题

问题根源

你用datetime.strptime生成的utc_time是个不带时区信息的朴素datetime对象。调用timestamp()时,Python会默认把这个对象当成你本地时区的时间来计算时间戳,而不是你输入的UTC时间——这就是转换后时间偏移的原因。

修复方法

方法1:解析时直接绑定UTC时区

给解析出的朴素datetime对象加上UTC时区标记,让timestamp()明确知道这是UTC时间:

from datetime import datetime
import pytz

utc = '2023-09-20T05:04:54'

# 解析后直接绑定UTC时区
utc_time = datetime.strptime(utc, '%Y-%m-%dT%H:%M:%S').replace(tzinfo=pytz.utc)
utc_dn = utc_time.timestamp()
utc_back = datetime.fromtimestamp(utc_dn, tz=pytz.utc)
utc_str_back = utc_back.strftime('%Y-%m-%d %H:%M:%S %Z')

# 此时输出为:'2023-09-20 05:04:54 UTC'

方法2:用utcfromtimestamp转换回时间

如果不想在解析时处理时区,转换回datetime时用utcfromtimestamp,它会直接把时间戳当作UTC时间解析:

from datetime import datetime
import pytz

utc = '2023-09-20T05:04:54'

utc_time = datetime.strptime(utc, '%Y-%m-%dT%H:%M:%S')
utc_dn = utc_time.timestamp()
# 用utcfromtimestamp替代fromtimestamp,无需指定时区
utc_back = datetime.utcfromtimestamp(utc_dn)
utc_str_back = utc_back.strftime('%Y-%m-%d %H:%M:%S UTC')

# 此时输出为:'2023-09-20 05:04:54 UTC'

进阶推荐:Python 3.9+用zoneinfo替代pytz

如果你的Python版本在3.9及以上,建议用标准库的zoneinfo代替第三方的pytz,用法更简洁规范:

from datetime import datetime
from zoneinfo import ZoneInfo

utc = '2023-09-20T05:04:54'

utc_time = datetime.strptime(utc, '%Y-%m-%dT%H:%M:%S').replace(tzinfo=ZoneInfo('UTC'))
utc_dn = utc_time.timestamp()
utc_back = datetime.fromtimestamp(utc_dn, tz=ZoneInfo('UTC'))
utc_str_back = utc_back.strftime('%Y-%m-%d %H:%M:%S %Z')

# 此时输出为:'2023-09-20 05:04:54 UTC'

内容的提问来源于stack exchange,提问作者Qinghuan Li

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 18:45:13