我正在使用python的dateutil.parser工具来解析从第三方feed获得的一些日期。它允许指定一个默认日期(其本身默认为今天),用于填充解析日期中缺少的元素。虽然这通常是有帮助的,但是对于我的用例来说并没有合理的默认值,我更愿意将部分日期当作根本没有得到日期一样对待(因为这几乎总是意味着我得到了混乱的数据)。我已经写了以下工作:from dateutil import parser
import datetime
def parse_no_default(dt_str):
dt = parser.parse(dt_str, default=datetime.datetime(1900, 1, 1)).date()
dt2 = parser.parse(dt_str, default=datetime.datetime(1901, 2, 2)).date()
if dt == dt2:
return dt
else:
return None
(这段代码只查看日期,因为这是我关心的应用程序的全部内容,但是类似的逻辑可以扩展到包括时间组件。)
我想知道(希望)有更好的办法。至少可以说,对同一个字符串进行两次解析,看看它是否填充了不同的默认值,这似乎是对资源的严重浪费。
以下是针对预期行为的一组测试(使用nosetest生成器):import nose.tools
import lib.tools.date
def check_parse_no_default(sample, expected):
actual = lib.tools.date.parse_no_default(sample)
nose.tools.eq_(actual, expected)
def test_parse_no_default():
cases = (
('2011-10-12', datetime.date(2011, 10, 12)),
('2011-10', None),
('2011', None),
('10-12', None),
('2011-10-12T11:45:30', datetime.date(2011, 10, 12)),
('10-12 11:45', None),
('', None),
)
for sample, expected in cases:
yield check_parse_no_default, sample, expected