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

如何将长度不一的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的解析器可以自动处理不完整日期,代码量更少:

  1. 先安装依赖:pip install python-dateutil
  2. 代码示例:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:36:05