python date.min无法反向转换,为什么?

3 投票
2 回答
1900 浏览
提问于 2025-04-16 21:32

考虑一下这段代码:

datestring = date.min.strftime("%d-%m-%Y")
date = datetime.strptime(datestring,"%d-%m-%Y")

这段代码会出现以下错误:

Traceback (most recent call last):   File "D:/Dev/foo.py", line 37, in <module>
    datestring = date.min.strftime("%d-%m-%Y") ValueError: year=1 is before 1900; the datetime strftime() methods require year >= 1900

那为什么最小日期不是1900年呢???

我在一个类的初始化方法中把日期设置为date.min,想让它看起来像是一个空日期。这样在存储到sqlite数据库时,就不会有空值(Null)日期了。

我这么做是因为当我从数据库读取一个空日期时,会在dbapi2.py的convertdate函数中出现错误。

你们是怎么解决这个问题的呢?

2 个回答

4

你可以使用“ISO 8601格式:YYYY-MM-DD”:

>>> from datetime import date, datetime
>>> date_str = date.min.isoformat()
>>> print date_str
0001-01-01
>>> date_obj = datetime.strptime(date_str,"%Y-%m-%d")
>>> print date_obj
0001-01-01 00:00:00
2

这不是date.mindatetime模块的问题,而是因为不同平台在实现strftime时出现了一些奇怪的情况。

可以查看这个链接了解更多信息:http://bugs.python.org/issue1777412

一个解决办法是设置一个date_min > 1900,或者直接使用自己手动写的字符串作为默认日期值。

撰写回答