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

如何用Python生成指定格式时间戳?解析该格式报错求解

Python时间戳生成与格式解析错误处理

问题说明

  • 需要生成格式为 2023-03-24T12:02:20.1273789+01:00 的时间戳
  • 使用以下代码解析该格式字符串时触发报错:
formatted_timestamp = datetime.strptime(timestamp_string, '%Y-%m-%dT%H:%M:%S.%f%z').strftime(
                '%Y-%m-%d %H:%M:%S')

报错信息:

error: time data '2023-03-24T12:02:20.1273789+01:00' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'

报错原因

Python datetime 模块的 %f 格式符仅支持匹配最多6位微秒,但目标时间字符串的微秒部分是7位(1273789),导致格式匹配失败。

解决方案

1. 生成指定格式的时间戳

Python原生datetime的微秒最多保留6位,要生成7位微秒的格式,可通过字符串拼接实现:

from datetime import datetime

# 获取带时区的当前时间(示例时区为+01:00)
now = datetime.now().astimezone()
# 拆分iso格式的各部分
date_time, tz = now.isoformat(timespec='microseconds').split('+')
date_part, micro6 = date_time.split('.')
# 将6位微秒补为7位(此处取前6位后补0,也可根据需求调整精度)
micro7 = f"{micro6}0"[:7]
# 拼接成目标格式
target_timestamp = f"{date_part}.{micro7}+{tz}"

print(target_timestamp)

2. 正确解析7位微秒的时间字符串

原生方法(无需第三方库)

截取微秒部分的前6位,适配%f格式符的限制:

from datetime import datetime

timestamp_string = '2023-03-24T12:02:20.1273789+01:00'
# 拆分并调整微秒位数
if '.' in timestamp_string:
    before_dot, after_dot = timestamp_string.split('.', 1)
    micro_part, tz_part = after_dot.split('+', 1)
    # 保留前6位微秒
    adjusted_micro = micro_part[:6]
    adjusted_str = f"{before_dot}.{adjusted_micro}+{tz_part}"
else:
    adjusted_str = timestamp_string

# 解析并转换格式
dt = datetime.strptime(adjusted_str, '%Y-%m-%dT%H:%M:%S.%f%z')
formatted_result = dt.strftime('%Y-%m-%d %H:%M:%S')
print(formatted_result)

第三方库简化方案(推荐)

使用python-dateutil库的isoparse方法,自动兼容7位微秒格式:

from dateutil import parser

timestamp_string = '2023-03-24T12:02:20.1273789+01:00'
dt = parser.isoparse(timestamp_string)
formatted_result = dt.strftime('%Y-%m-%d %H:%M:%S')
print(formatted_result)

注:需先安装库:pip install python-dateutil

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:47:49