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

Python中UTC字符串时间戳转换为EST时区的格式异常处理问题

Python UTC时间字符串转EST时区格式化方案

问题根源

你当前的代码存在两个核心问题:

  • 用strptime解析得到的是无时区标注的原生datetime对象,没有明确指定其属于UTC时区,直接调用astimezone转换会出现时区计算错误
  • 转换后得到的是datetime类实例,没有执行格式化转字符串操作,所以输出的是对象的原生表示形式,不是预期的时间字符串

基于pytz的修复代码

from datetime import datetime
import pytz

# 预定义时区,避免循环中重复实例化提升性能
UTC_TZ = pytz.UTC
EST_TZ = pytz.timezone('US/Eastern')
# 时间格式常量,避免硬编码
TIME_FORMAT = '%Y-%m-%d %H:%M:%S'

# 你的原始嵌套列表
raw_list = [['File_1','2021-09-09 07:05:10'],['File_2','2021-09-08 08:05:11']]

processed_list = []
for file_item in raw_list:
    file_name, utc_time_str = file_item
    # 1. 解析时间字符串为原生datetime
    naive_utc_dt = datetime.strptime(utc_time_str, TIME_FORMAT)
    # 2. 给原生datetime标注UTC时区属性
    aware_utc_dt = UTC_TZ.localize(naive_utc_dt)
    # 3. 时区转换为EST
    est_dt = aware_utc_dt.astimezone(EST_TZ)
    # 4. 格式化为目标字符串格式
    est_time_str = est_dt.strftime(TIME_FORMAT)
    processed_list.append([file_name, est_time_str])

如果偏好简写可以用列表推导式实现:

processed_list = [
    [
        item[0],
        UTC_TZ.localize(datetime.strptime(item[1], TIME_FORMAT))
        .astimezone(EST_TZ)
        .strftime(TIME_FORMAT)
    ]
    for item in raw_list
]

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

Python 3.9开始标准库新增zoneinfo模块,可以直接实现时区转换,无需第三方依赖:

from datetime import datetime
from zoneinfo import ZoneInfo

UTC_TZ = ZoneInfo('UTC')
EST_TZ = ZoneInfo('US/Eastern')
TIME_FORMAT = '%Y-%m-%d %H:%M:%S'

raw_list = [['File_1','2021-09-09 07:05:10'],['File_2','2021-09-08 08:05:11']]
processed_list = [
    [
        item[0],
        datetime.strptime(item[1], TIME_FORMAT).replace(tzinfo=UTC_TZ)
        .astimezone(EST_TZ)
        .strftime(TIME_FORMAT)
    ]
    for item in raw_list
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:24:03