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

Python 3.10(Windows)带冒号的UTC时区偏移格式化问题

问题解答

这不是语法错误,是**%:z格式码在Windows平台的Python 3.10环境下不可用**。

Python官方文档明确标注%:z属于平台相关的扩展格式码,并非所有系统都支持。Windows系统依赖的C标准库(msvcrt)实现的strftime函数不支持该格式,因此在Windows上运行Python时使用%:z会触发ValueError。

替代解决方案

如果需要输出带冒号的时区偏移(例如-07:00),可以采用以下几种方法:

方法1:手动处理%z的输出结果

先用%z获取无冒号的时区偏移字符串,再手动插入冒号:

from datetime import datetime

dt = datetime.now().astimezone()
raw_offset = dt.strftime("%z")
formatted_offset = f"{raw_offset[:3]}:{raw_offset[3:]}"
final_str = f"{dt:%Y-%m-%d %H:%M:%S}{formatted_offset}"
print(final_str)  # 示例输出:2024-10-09 13:17:21-07:00

方法2:通过tzinfo属性计算偏移

直接从datetime对象的时区信息中提取并格式化偏移:

from datetime import datetime

dt = datetime.now().astimezone()
offset = dt.utcoffset()
sign = "+" if offset.total_seconds() >= 0 else "-"
hours = abs(offset.days * 24 + offset.seconds // 3600)
minutes = abs((offset.seconds % 3600) // 60)
formatted_offset = f"{sign}{hours:02d}:{minutes:02d}"
final_str = f"{dt:%Y-%m-%d %H:%M:%S}{formatted_offset}"
print(final_str)

方法3:升级Python到3.11及以上版本

Python 3.11起,官方在Windows平台上对%:z格式码提供了跨平台支持,升级后可以直接使用你最初的代码:

from datetime import datetime
print(f"{datetime.now().astimezone():%Y-%m-%d %H:%M:%S%:z}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 10:52:37