如何在Python 3中从字符串提取日期时间并解决strptime格式报错问题?
问题原因
报错的核心是格式模板和输入字符串的字段规则不匹配,主要有两个触发点:
- 最常见的原因:月、日的格式符顺序写反
输入字符串06/30/16是「月/日/年」的顺序,06是月份、30是日期,但你使用的格式符%d/%m/%y是「日/月/年」的规则:%d匹配1~31范围的日期%m匹配1~12范围的月份
模板会尝试把第二个字段30识别为月份,不存在合法的30月,直接触发格式不匹配错误。
- 潜在原因:系统区域设置非英文,
%a无法匹配英文星期缩写%a默认匹配当前系统locale对应的星期缩写,如果你的系统是中文locale,%a只会识别周四这类中文缩写,不会匹配英文Thu。
解决方法
第一步:修正月日格式符顺序
把%d/%m/%y调整为%m/%d/%y,匹配输入字符串的月/日/年顺序:
from datetime import datetime date_time_obj = datetime.strptime("06/30/16(Thu)12:41:05",'%m/%d/%y(%a)%H:%M:%S')
第二步:适配非英文系统的星期缩写匹配
如果修正顺序后仍报错,可在解析前临时把时间相关的locale切换为英文,解析完成后可按需改回原设置:
from datetime import datetime import locale # Windows系统填写'English_US',Linux/macOS系统填写'en_US.UTF-8' locale.setlocale(locale.LC_TIME, 'English_US') date_time_obj = datetime.strptime("06/30/16(Thu)12:41:05",'%m/%d/%y(%a)%H:%M:%S')
修正后即可正常解析得到时间对象:datetime.datetime(2016, 6, 30, 12, 41, 5)
内容的提问来源于stack exchange,提问作者project mpi
相关产品推荐
相关产品推荐

