python date.min无法反向转换,为什么?
考虑一下这段代码:
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.min
或datetime
模块的问题,而是因为不同平台在实现strftime
时出现了一些奇怪的情况。
可以查看这个链接了解更多信息:http://bugs.python.org/issue1777412
一个解决办法是设置一个date_min > 1900
,或者直接使用自己手动写的字符串作为默认日期值。