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
相关产品推荐
相关产品推荐

