Python中如何进行时区时间格式化及生成ISO 8601格式时间?
嘿,我来帮你搞定这两个Python时间处理的问题~
1. 如何在Python中将时间格式化为指定时区的时间?
处理时区时间推荐优先用标准库工具,不同Python版本有不同的实用方案:
Python 3.9+ 推荐用 zoneinfo(标准库)
这个版本自带的zoneinfo模块可以直接处理时区,搭配datetime使用非常顺手:
from datetime import datetime from zoneinfo import ZoneInfo # 获取当前UTC时间(带时区信息) utc_now = datetime.now(ZoneInfo("UTC")) # 转换为目标时区,比如上海时区(Asia/Shanghai) target_time = utc_now.astimezone(ZoneInfo("Asia/Shanghai")) # 格式化为你需要的字符串样式,这里示例带时区标识 formatted_time = target_time.strftime("%Y-%m-%d %H:%M:%S %Z") print(formatted_time) # 输出类似:2024-05-20 14:45:00 CST
Python 3.9以下版本用 pytz(第三方库)
需要先通过pip install pytz安装库,然后这样处理:
from datetime import datetime import pytz # 获取UTC时间 utc_now = datetime.now(pytz.utc) # 指定目标时区 target_tz = pytz.timezone("Asia/Shanghai") # 转换时区 target_time = utc_now.astimezone(target_tz) # 格式化输出 formatted_time = target_time.strftime("%Y-%m-%d %H:%M:%S %Z") print(formatted_time)
⚠️ 小提醒:尽量别用不带时区信息的"naive datetime"对象,不然很容易踩到时区混淆的坑!
2. 如何在Python中生成形如2020-12-18T21:43:42Z的时间格式?
先说说你之前代码的问题:date.fromisoformat只处理日期部分,而这个字符串包含时分秒和时区标识Z,得用datetime类来处理才行。
这个格式是ISO 8601标准的UTC时间表示,Z就代表UTC时区(等同于+00:00),生成和解析的方法如下:
生成该格式的字符串
如果你要生成当前UTC时间的这种格式,有两种简单方法:
from datetime import datetime, timezone # 获取当前UTC时间(带时区信息) utc_now = datetime.now(timezone.utc) # 方法1:用isoformat生成后替换+00:00为Z formatted_time = utc_now.isoformat().replace("+00:00", "Z") print(formatted_time) # 输出类似:2024-05-20T06:45:00Z # 方法2:直接用strftime格式化 formatted_time = utc_now.strftime("%Y-%m-%dT%H:%M:%SZ") print(formatted_time)
解析该格式的字符串
如果是要把2020-12-18T21:43:42Z转成datetime对象,Python 3.10及以下版本需要先把Z替换成+00:00,3.11+版本可以直接解析:
from datetime import datetime time_str = "2020-12-18T21:43:42Z" # Python 3.10及以下版本 dt = datetime.fromisoformat(time_str.replace("Z", "+00:00")) # Python 3.11+ 可以直接写:dt = datetime.fromisoformat(time_str) print(dt) # 输出:2020-12-18 21:43:42+00:00
内容的提问来源于stack exchange,提问作者mosa lorans
相关产品推荐
相关产品推荐

