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

Python解析含超微秒的未知ISO格式datetime的方法咨询

解析含纳秒的Datetime字符串问题

问题重现

尝试解析以下Datetime字符串:

t = '2021-08-21 11:23:45.180999936'

使用datetime.strptime解析:

from datetime import datetime

datetime.strptime(t, '%Y-%m-%d %H:%M:%S.%f').time()

运行后报错:

ValueError: unconverted data remains: 936 strptime

问题原因

Python标准库中strptime的%f格式符仅支持6位微秒精度,但目标字符串的小数秒部分是9位(前6位为微秒,后3位为纳秒),超出了%f的解析范围,因此抛出未转换数据的错误。

正确解析方式

方法1:截断字符串到微秒精度

手动截取字符串的前29位(保留小数点后6位),再用strptime解析:

t = '2021-08-21 11:23:45.180999936'
t_truncated = t[:29]  # 保留到小数点后6位
dt = datetime.strptime(t_truncated, '%Y-%m-%d %H:%M:%S.%f')
print(dt.time())  # 输出: 11:23:45.180999

方法2:使用dateutil自动解析(需额外安装)

python-dateutil的解析器支持自动识别纳秒级时间字符串:

# 先安装库:pip install python-dateutil
from dateutil import parser

t = '2021-08-21 11:23:45.180999936'
dt = parser.parse(t)
print(dt.time())  # 输出: 11:23:45.180999

方法3:Python 3.9+ 使用fromisoformat

Python 3.9及以上版本的datetime.fromisoformat原生支持解析含纳秒的ISO 8601格式字符串:

from datetime import datetime

t = '2021-08-21 11:23:45.180999936'
dt = datetime.fromisoformat(t)
print(dt.time())  # 输出: 11:23:45.180999

对应的ISO格式

该字符串符合ISO 8601扩展格式,ISO 8601允许时间的小数秒部分包含1-9位数字,分别对应从十分之一秒到纳秒的精度。Python标准库的strptime仅实现了6位微秒的解析,因此无法直接处理9位纳秒格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 00:18:19