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

如何将API返回的ISO格式日期时间格式化为指定样式?

解决ISO时间字符串转指定日期/时间格式的问题

问题分析

你之前的代码存在两个核心错误:

  1. datetime.date().strftime(end_date1,'%Y-%M-%d') 写法错误:datetime.date() 是创建空日期对象,而非将字符串转为日期类型;且%M代表分钟,月份的格式化符是小写%m。
  2. datetime.fromisoformat 未正确使用,需要先将ISO字符串转为datetime实例,再调用格式化方法。

可行解决方案

Python 3.7+ 内置的datetime.fromisoformat()可以直接解析带时区的ISO格式字符串,之后通过strftime()即可输出你需要的格式。

完整代码示例

import datetime

# 从API获取的ISO格式字符串
end_date_str = item['RunDate']  # 示例值:"2022-07-27T00:00:00.0000000+01:00"
start_time_str = portion['StartTimeWTT']

# 处理日期:转成yyyy-mm-dd格式
end_date_obj = datetime.datetime.fromisoformat(end_date_str)
formatted_end_date = end_date_obj.strftime('%Y-%m-%d')

# 处理时间:转成hh:mm:ss格式
start_time_obj = datetime.datetime.fromisoformat(start_time_str)
formatted_start_time = start_time_obj.strftime('%H:%M:%S')

# 输出结果
print(formatted_end_date)  # 输出:2022-07-27
print(formatted_start_time)  # 输出:00:00:00

兼容Python 3.6及以下版本的方案

如果你的Python版本低于3.7,无法使用fromisoformat(),可以用strptime()匹配ISO格式:

import datetime

# 匹配带微秒和时区的ISO格式
date_format = "%Y-%m-%dT%H:%M:%S.%f%z"

end_date_obj = datetime.datetime.strptime(end_date_str, date_format)
formatted_end_date = end_date_obj.strftime('%Y-%m-%d')

start_time_obj = datetime.datetime.strptime(start_time_str, date_format)
formatted_start_time = start_time_obj.strftime('%H:%M:%S')

关键注意点

  • 格式化符区分大小写:%Y(4位年份)、%m(2位月份)、%d(2位日期)、%H(24小时制小时)、%M(分钟)、%S(秒)。
  • 如果API返回的时间字符串不带微秒或时区,只需调整strptime()的格式字符串即可,比如"%Y-%m-%dT%H:%M:%S"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 05:54:17