如何直接将无前导零的日期字符串'10624'转为Python date对象
解决Python中混合位数日期字符串的解析问题
首先明确:Python标准库的datetime.strptime不支持可变位数的日期格式匹配——%m要求必须是两位数字,直接用%m%d%y会把字符串前两位10当成月份,不符合需求;而%-m这类格式符仅在部分系统的strftime中生效,且strptime本身不支持该写法。
如果不能对原字符串'10624'做补零、拆分等格式化操作,你可以通过直接提取对应位置字符转数值的方式构造date对象,这种方式不算修改原字符串结构:
from datetime import date date_str = '10624' month = int(date_str[0]) # 取第一个字符作为月份 day = int(date_str[1:3]) # 取第2-3位作为日期 year = 2000 + int(date_str[3:])# 取最后两位补20前缀作为年份(若为19xx需调整前缀) result_date = date(year, month, day) print(result_date) # 输出:2024-01-06
另一种可选方案是使用dateutil.parser模块(需先安装python-dateutil),它能智能识别非标准格式,通过参数避免歧义:
from dateutil import parser date_str = '10624' # dayfirst=True强制优先解析日期,避免把10识别为月份 result_date = parser.parse(date_str, dayfirst=True) print(result_date.date()) # 输出:2024-01-06
注意:dateutil.parser的智能解析存在歧义风险,若有固定格式规则,手动提取的方式更可靠。
内容的提问来源于stack exchange,提问作者Shreyas bhong
相关产品推荐
相关产品推荐

