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

Python 将带指定时区的时间字符串转换为 UTC 时间的实现

时区时间转换为UTC时间的正确实现

原代码的逻辑存在错误:通过datetime.datetime.strptime解析得到的是不带时区标识的 naive 时间对象,直接调用astimezone方法时,Python会默认把该时间识别为代码运行设备的本地时区,再转换到你指定的目标时区,完全不符合「scheduleDate是对应timezone时区下的时间」的需求,输出结果不符合预期。

基于pytz的修正代码

import datetime
import pytz

timezone = "America/New_York"
scheduleDate = "2021-09-21 21:00:00"

# 解析得到无时区信息的基础时间对象
naive_dt = datetime.datetime.strptime(scheduleDate, '%Y-%m-%d %H:%M:%S')
# 给基础时间绑定指定的时区信息,生成带时区标识的时间对象
local_aware_dt = pytz.timezone(timezone).localize(naive_dt)
# 直接转换为UTC时区时间
utc_dt = local_aware_dt.astimezone(datetime.timezone.utc)
# 格式化输出
sdate = utc_dt.strftime('%Y-%m-%dT%H:%M:%SZ')
print(sdate)

以上代码输出结果为2021-09-22T01:00:00Z,符合2021年9月纽约夏令时比UTC晚4小时的换算规则。

Python 3.9+ 标准库实现(无需安装pytz)

import datetime
from zoneinfo import ZoneInfo

timezone = "America/New_York"
scheduleDate = "2021-09-21 21:00:00"

naive_dt = datetime.datetime.strptime(scheduleDate, '%Y-%m-%d %H:%M:%S')
local_aware_dt = naive_dt.replace(tzinfo=ZoneInfo(timezone))
utc_dt = local_aware_dt.astimezone(datetime.timezone.utc)
sdate = utc_dt.strftime('%Y-%m-%dT%H:%M:%SZ')
print(sdate)

注意事项

  • 无需通过时间戳中转实现时区转换,多步中转容易引入额外误差,直接调用astimezone转换带时区标识的时间对象更可靠
  • 遇到夏令时切换区间的模糊时间,可通过pytz的localize方法传入is_dst参数指定处理逻辑,避免转换报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:18:02