Python解析含2月29日的日期字符串时触发"day is out of range for month"错误的原因咨询
Python解析含2月29日的日期字符串时触发"day is out of range for month"错误的原因咨询
哦,这个问题我之前踩过坑!原因其实很直白——你传入的日期字符串里没有包含年份,strptime在这种情况下会默认使用1900年作为基准年份,而1900年并不是闰年,2月份只有28天,自然就会抛出「日期超出月份范围」的错误了。
这里得补充个闰年小知识:整百年份必须能被400整除才是闰年,1900除以400等于4.75,不符合条件,所以它的2月没有29号;而你提到的2024年是普通闰年(能被4整除但不是整百年),所以才有2月29日。
给你两个解决思路:
- 第一种:修改日期字符串,加上年份,同时调整格式字符串:
import datetime tstr = "2024-02-29 13:34:57.041" dt = datetime.datetime.strptime(tstr, '%Y-%m-%d %H:%M:%S.%f') - 第二种:如果没法修改原始字符串,就在解析后手动替换年份:
import datetime tstr = "02-29 13:34:57.041" dt = datetime.datetime.strptime(tstr, '%m-%d %H:%M:%S.%f').replace(year=2024)
这样就能得到正确的2024年2月29日的datetime对象啦。
备注:内容来源于stack exchange,提问作者lucky1928
相关产品推荐
相关产品推荐

