如何将长度不一的Y-M-D格式日期字符串转换为datetime类型
不完整Y-M-D格式日期字符串的简洁转换方案
方案1:原生Python实现(无第三方依赖)
通过字符串拆分补全的方式实现,不需要多分支长度判断,逻辑清晰易维护:
from datetime import datetime def parse_incomplete_date(date_str, default_month=1, default_day=1): # 按分隔符拆分后转换为整数列表 parts = list(map(int, date_str.split('-'))) # 自动补全缺失的月、日字段 while len(parts) < 3: parts.append(default_month if len(parts) == 1 else default_day) return datetime(year=parts[0], month=parts[1], day=parts[2]) # 测试示例 if __name__ == "__main__": test_dates = ["2010-01-14", "2010-01", "2010"] for d in test_dates: # 若需要输出标准字符串,可追加.strftime("%Y-%m-%d") print(parse_incomplete_date(d))
运行后输出结果:
2010-01-14 00:00:00 2010-01-01 00:00:00 2010-01-01 00:00:00
你可以根据需求调整default_month和default_day的默认值,比如也可以将缺失的日期补为当月最后一天。
方案2:第三方库极简实现
如果允许引入第三方依赖,用python-dateutil的解析器可以自动处理不完整日期,代码量更少:
- 先安装依赖:
pip install python-dateutil - 代码示例:
from datetime import datetime from dateutil.parser import parse # 自定义缺省日期模板,未指定的部分会自动继承该模板的数值 default_date = datetime(2000, 1, 1) test_dates = ["2010-01-14", "2010-01", "2010"] for d in test_dates: print(parse(d, default=default_date))
该方法还能兼容更多非标准的日期格式,不需要自己做格式适配。
内容的提问来源于stack exchange,提问作者Nikola Stoyanov
相关产品推荐
相关产品推荐

