Python datetime对象转字符串输出格式不符合预期如何解决
问题根因
- 你调用
datetime.now()生成的是无绑定时区的 naive datetime 对象,无法读取时区信息,所以%Z格式符输出为空 %f格式符输出的是6位微秒,和你需要的3位毫秒精度不符%Z/%z默认输出的时区格式和你需要的+00:00带冒号的偏移量格式不匹配
最优解决方案(Python 3.6+ 支持)
直接使用datetime对象自带的isoformat方法,指定毫秒精度,会自动生成符合你要求的ISO 8601格式字符串,代码如下:
from datetime import datetime, timezone # 生成绑定UTC时区的datetime对象 cur_time = datetime.now(timezone.utc) # timespec="milliseconds"指定保留3位毫秒精度,自动输出带时区偏移的格式 last_runtime = cur_time.isoformat(timespec="milliseconds") print(last_runtime)
输出示例:2021-10-13T09:09:27.825+00:00,完全匹配你的需求。
手动格式化兼容方案
如果你需要用strftime手动实现,可参考以下代码:
from datetime import datetime, timezone cur_time = datetime.now(timezone.utc) # 四舍五入得到3位毫秒 ms = round(cur_time.microsecond / 1000) # 基础格式化得到带4位时区偏移的字符串(如+0000) time_str = cur_time.strftime(f"%Y-%m-%dT%H:%M:%S.{ms:03d}%z") # 处理时区格式,插入冒号得到+00:00 last_runtime = f"{time_str[:-2]}:{time_str[-2:]}" print(last_runtime)
内容的提问来源于stack exchange,提问作者ManCity10
相关产品推荐
相关产品推荐

