我使用python的dateutil.parser
工具來解析我從第三方提要中獲取的某些日期。它允許指定缺省日期,該日期本身默認爲今天,用於填充解析日期的缺失元素。雖然這通常很有幫助,但我的用例沒有明智的默認設置,我寧願將部分日期視爲沒有得到日期(因爲它幾乎總是意味着我得到了亂碼數據)。我寫了下面的解決:在不使用默認情況下解析python中的日期
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
這隻能解決空字符串的情況。當我有部分日期時,它仍然默認沒有指定的字段,但會獲得與默認日期不同的最終日期。我已經在問題中添加了一些單元測試來說明需求以及本例失敗的地方。謝謝你看一看! –
要小心,顯然在你的第一個例子中,你正在比較一個日期對象和日期時間對象。它總是不平等的。 –