Python中如何将时区字符串转换为datetime对象及ISO 8601格式?
Python 带时区时间字符串转datetime并格式化ISO 8601方案
针对2022-06-23T05:00:00.006417+00:00Z这类带时区标识的ISO格式时间字符串,可按以下步骤用Python标准库完成处理,无需依赖第三方包:
1. 字符串转带时区的datetime对象
根据你使用的Python版本选择对应写法:
- Python 3.7 ~ 3.10 版本
原生datetime.fromisoformat()方法暂不支持直接解析末尾的Z(UTC时区标识,等价于+00:00),需要先对字符串做简单替换再解析:from datetime import datetime, timezone time_str = "2022-06-23T05:00:00.006417+00:00Z" # 处理末尾Z标识 parse_str = time_str.removesuffix("Z") + "+00:00" if time_str.endswith("Z") else time_str dt = datetime.fromisoformat(parse_str) - Python 3.11 及以上版本
新版标准库已原生支持带Z后缀的ISO字符串解析,可直接调用方法:dt = datetime.fromisoformat(time_str)
解析得到的dt是带完整时区信息的datetime对象,不会丢失原字符串的偏移量数据。
2. 格式化为标准ISO 8601格式
直接调用datetime对象内置的isoformat()方法即可输出标准格式,可根据需要调整输出样式:
- 保留原始时区偏移、微秒精度:
standard_iso = dt.isoformat() # 输出值:2022-06-23T05:00:00.006417+00:00 - 输出UTC时区带Z后缀的ISO格式:
先将时间转换为UTC时区,再拼接Z后缀即可:utc_dt = dt.astimezone(timezone.utc) utc_iso = f"{utc_dt:%Y-%m-%dT%H:%M:%S.%f}Z" # 输出值:2022-06-23T05:00:00.006417Z
注意:转换过程中不要移除datetime对象的tzinfo属性,否则会丢失时区信息,导致时间计算、比对出现错误。
内容的提问来源于stack exchange,提问作者fizzbuzzzzz
相关产品推荐
相关产品推荐

