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

Python datetime为何拒绝解析无年份的2月29日?

问题:datetime.strptime解析无年份的2月29日报错是否符合设计逻辑?

问题场景

在Windows 11系统上使用Python 3.11执行以下代码时出现报错:

d = 'Mon 29 Feb'
import datetime
datetime.datetime.strptime(d, '%a %d %b')

报错信息如下:

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    datetime.datetime.strptime(d, '%a %d %b')
  File "C:\Users\pskipwith\AppData\Local\Programs\Python\Python311\Lib\_strptime.py", line 579, in _strptime_datetime
    return cls(*args)
ValueError: day is out of range for month

但添加年份(如2016)后即可正常执行:

d = 'Mon 29 Feb 2016'
datetime.datetime.strptime(d, '%a %d %b %Y')
# 输出结果:datetime.datetime(2016, 2, 29, 0, 0)

回答:这是符合Python datetime模块的设计逻辑的

原因说明

  • 当strptime解析不含年份的日期时,会默认填充1900年作为年份值,这是模块的既定行为。
  • 1900年是平年,2月份仅有28天,所以29日属于无效日期,触发ValueError是合理的。
  • 当明确指定闰年(比如2016年)时,2月有29天,日期合法,因此解析可以正常完成。

内容的提问来源于stack exchange,提问作者PMSK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:40:33