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

ISO格式时间字符串转datetime加1小时再转回字符串报错求助

解决ISO时间字符串加1小时的格式匹配问题

你的代码报错是因为格式字符串构造错误,无法匹配带毫秒段的时间字符串。原代码中('%Y-%m-%dT%H:%M:%S.%f')[:-3]会截断掉表示微秒的%f部分,最终格式变成%Y-%m-%dT%H:%M:%SZ,但你的时间字符串包含.529毫秒部分,导致匹配失败。

下面提供两种可行的解决方法:

方法一:修正格式字符串

直接使用包含毫秒段的格式匹配字符串,解析后再按要求转回原格式:

from datetime import datetime, timedelta

timestamp = '2022-12-23T16:21:14.529Z'
# 匹配带3位毫秒和末尾Z的格式
format_pattern = '%Y-%m-%dT%H:%M:%S.%fZ'

# 字符串转datetime
to_datetime = datetime.strptime(timestamp, format_pattern)
# 加1小时
add1_hour = to_datetime + timedelta(hours=1)
print(type(add1_hour), add1_hour)

# datetime转回原格式字符串
to_string = add1_hour.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'
print(type(to_string), to_string)

注:%f会匹配6位微秒,strptime会自动将输入的3位毫秒补零为6位微秒,不影响解析结果;转回字符串时截断后3位,还原为3位毫秒格式。

方法二:使用fromisoformat简化操作(Python 3.10+)

Python 3.10及以上版本的fromisoformat支持解析带时区的ISO字符串,只需简单处理Z符号即可:

from datetime import datetime, timedelta

timestamp = '2022-12-23T16:21:14.529Z'
# 将Z替换为UTC时区标识+00:00,适配fromisoformat解析
to_datetime = datetime.fromisoformat(timestamp.replace('Z', '+00:00'))
# 加1小时
add1_hour = to_datetime + timedelta(hours=1)
print(type(add1_hour), add1_hour)

# 转回带Z的ISO格式字符串
to_string = add1_hour.isoformat(timespec='milliseconds').replace('+00:00', 'Z')
print(type(to_string), to_string)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:45:41