Python时区转换问题:服务器时间晚2小时,求修正方案
问题排查与修复
你的代码核心问题是:未将原始UTC时间戳标记为UTC时区,直接使用无时区信息的datetime对象转换时区,导致结果错误。
原始时间2023-06-06T15:55:53Z是UTC标准时间,但通过strptime解析后得到的是无时区属性的naive datetime对象。调用astimezone(local_tz)时,Python会默认把这个时间当成当前系统本地时区的时间来转换,而非UTC基准时间,因此输出结果不符合预期。
修复后的代码
from datetime import datetime, timezone from zoneinfo import ZoneInfo vcenter_timestamp = '2023-06-06T15:55:53.232524391Z'[:19] server_format = '%Y-%m-%dT%H:%M:%S' # 解析时将时间明确标记为UTC时区 server_dt = datetime.strptime(vcenter_timestamp, server_format).replace(tzinfo=timezone.utc) local_tz = ZoneInfo('Europe/Rome') local_dt = server_dt.astimezone(local_tz) output_format = '%Y-%m-%d %H:%M:%S' dt_rome = local_dt.strftime(output_format) print(dt_rome)
关键改动说明
- 导入
timezone模块,通过replace(tzinfo=timezone.utc)给解析后的时间添加UTC时区标记,确保转换时的基准时间正确 - 移除重复的
import datetime(已从datetime包导入datetime类,无需重复导入)
执行修复后的代码会输出:2023-06-06 17:55:53,与期望结果一致。
内容的提问来源于stack exchange,提问作者OverflowStack
相关产品推荐
相关产品推荐

