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

如何裁剪含9位微秒的时间字符串以转换为datetime对象

问题说明

现有表示时间的字符串,秒后的小数部分为9位(纳秒级),但Python标准库datetime的%f格式化符默认仅支持解析6位微秒值,直接传入原始字符串会触发格式不匹配报错。示例待处理字符串:

'2022-05-09 08:02:18.106869456 +0000 UTC'

需要裁剪小数秒部分多余的3位数字,完成datetime对象的正确转换。

实现方案

1. 通用兼容方案(全Python版本支持,鲁棒性最高,优先推荐)

用正则精准匹配秒后的小数段,仅保留前6位,不需要硬编码字符串切片索引,不会因为日期、时区部分的长度变化出现匹配错误。

import re
from datetime import datetime

raw_time_str = '2022-05-09 08:02:18.106869456 +0000 UTC'
# 匹配小数点后的数字串,保留前6位,裁掉多余部分
fixed_time_str = re.sub(r'(\.\d{6})\d+', r'\1', raw_time_str)
# 按固定格式解析即可
dt_instance = datetime.strptime(fixed_time_str, '%Y-%m-%d %H:%M:%S.%f %z %Z')

避坑提示:不要使用固定位置切片的方式裁剪字符串,比如写死切出前26位再拼接后续内容,一旦时间串里的月、日为个位数(比如2022-5-9而非补零的2022-05-09),索引位置会直接偏移,导致裁剪结果错误,这类问题隐蔽性很强,线上排查成本极高。

2. 高版本Python简洁方案(Python 3.11+可用)

Python 3.11对strptime的%f解析逻辑做了升级,支持最多9位的小数秒输入,不需要做任何字符串预处理,直接解析原始字符串即可:

from datetime import datetime

raw_time_str = '2022-05-09 08:02:18.106869456 +0000 UTC'
dt_instance = datetime.strptime(raw_time_str, '%Y-%m-%d %H:%M:%S.%f %z %Z')

如果你的运行环境能确定是Python 3.11及以上版本,选这个方案代码最简洁,没有额外处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:24:29