日期时间模块可以进行日期验证和数学处理,这在您关心现实时很好.
我需要一个包含生成日期的对象,即使它们无效也是如此.日期时间过于严格,有时候我只知道一年或一年和一个月,有时我有一个像2011-02-30这样的日期.
是否有一个模块,就像datetime但可以处理无效日期?
如果没有,那么在尽可能少复制功能的同时处理这个问题的最佳方法是什么,并且在可以执行时仍然允许日期数学?
UPDATE
这样做的动机是与多个系统集成,这些系统使用日期并且不关心无效日期(mysql和perl),除了希望能够告诉基本的一般时间范围.对于模糊日期数学,从已知时间单位的开始开始(如果我知道年份和月份而不是日期,请使用第一个,如果我知道年份但没有月份或日期,请先使用1月份).最后一点不是必要的,但是很好,我明白为什么它不常见,因为需要特殊情况日期数学的人可能会自己构建它.
我遇到的一个主要问题是使用sqlalchemy和mysqldb将日期从mysql加载到python中 - 如果你从mysql中的日期列im mysql加载一个看起来像'2011-01-00'的值,你在python中得到None.任何伸展都不是很酷.
如果日期时间模块太严格,请将其存储为字符串或用零填充的元组以表示未知值。
编辑如果您在从 mysql 转换为 python 时遇到问题,请自己编写一个适配器类以安全的方式进行转换(请参阅更改属性行为)。
Edit2一个简单的替代方案可能是编写一个简短的脚本来运行所有 SQL 日期并进行更正,即将 2011-01-00 更改为 2011-01-01
Edit3文档建议您可以覆盖反射列,以便您可以将时间戳列视为字符串...或者在 SQLAlchemy 的更高版本中,您可以使用column_property进行覆盖。