Python のdateutil.parser
ツールを使用して、サード パーティのフィードから取得した日付を解析しています。解析された日付の欠落要素を埋めるために、デフォルトの日付自体を指定できます。デフォルトは今日です。これは一般的には役に立ちますが、私のユースケースには適切なデフォルトはありません。部分的な日付を、日付をまったく取得していないかのように扱いたいと思います (ほとんどの場合、データが文字化けしていることを意味するため)。私は次の回避策を書きました:
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
(このスニペットは日付のみを調べます。これは、アプリケーションで気にするのは日付だけですが、同様のロジックを拡張して時間コンポーネントを含めることができます。)
これを行うためのより良い方法があると思っています(願っています)。同じ文字列を 2 回解析して、異なるデフォルト値が設定されているかどうかを確認するのは、控えめに言っても、リソースの無駄遣いのように思えます。
期待される動作の一連のテスト (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