时间日期数据格式匹配报错:求指定时间字符串的正确格式
时间日期格式匹配问题解决方案
问题中的时间字符串'03-MAY-22 02.42.33.000000000 AM'与格式'%d-%b-%y %I.%M.%S.%f %p'不匹配的核心原因是:%f格式符仅支持匹配6位微秒,而目标字符串中秒后是9位纳秒,两者长度不兼容。
针对不同工具的解决方案如下:
Python 标准库处理
Python的datetime.strptime不直接支持9位纳秒解析,可通过两种方式处理:
- 截断纳秒部分:将字符串的纳秒位截断为6位后,再用原格式解析:
from datetime import datetime time_str = '03-MAY-22 02.42.33.000000000 AM' # 拆分字符串并截取6位纳秒,重组为符合%f要求的格式 split_part = time_str.split('.') split_part[-1] = split_part[-1][:6] + ' ' + split_part[-1].split(' ')[-1] formatted_str = '.'.join(split_part) dt = datetime.strptime(formatted_str, '%d-%b-%y %I.%M.%S.%f %p') - 使用第三方库:借助
dateutil.parser自动识别格式,无需手动指定格式字符串:from dateutil import parser dt = parser.parse('03-MAY-22 02.42.33.000000000 AM')
其他语言示例(以Java 8+为例)
Java的DateTimeFormatter支持9位纳秒匹配,使用格式字符串dd-MMM-yy hh.mm.ss.nnnnnnnnn a即可:
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class Main { public static void main(String[] args) { String timeStr = "03-MAY-22 02.42.33.000000000 AM"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yy hh.mm.ss.nnnnnnnnn a"); LocalDateTime dt = LocalDateTime.parse(timeStr, formatter); } }
内容的提问来源于stack exchange,提问作者Devendra Yadav
相关产品推荐
相关产品推荐

