2013-08-03 38 views
4

dateutil.parser用於解析給定字符串並將其轉換爲datetime.datetime對象。它處理模棱兩可的日期,如「2-5-2013」​​,允許dayfirst and yearfirst parameters給出某種格式的先例。使dateutil解析器在模糊日期中產生錯誤

解析器是否有可能在遇到模糊日期時產生錯誤?我想這需要修改675/693/696附近的源代碼(parser.py),但是如果有一種方法不需要直接編輯源代碼,而是隻需要重新定義某些功能,那也會很棒。

當前的行爲:

>>> from dateutil import parser 
>>> parser.parse("02-03-2013") 
datetime.datetime(2013, 2, 3, 0, 0) 

期望的行爲:

>>> from dateutil import parser 
>>> parser.parse("02-03-2013") 
Traceback (most recent call last): 
.. 
ValueError: The date was ambiguous...<some text> 
+0

你可以猴子補丁的解析方法? – Hyperboreus

回答

5

要做到這一點,最好的辦法可能是寫檢查的3個不同的模棱兩可的情況下,平等的方法:

from dateutil import parser 

def parse(string, agnostic=True, **kwargs): 
    if agnostic or parser.parse(string, **kwargs) == parser.parse(string, yearfirst=True, **kwargs) == parser.parse(string, dayfirst=True, **kwargs): 
     return parser.parse(string, **kwargs) 
    else: 
     raise ValueError("The date was ambiguous: %s" % string) 
+1

這是一種自然而有效的方式,我印象深刻(並且感到羞愧,我自己沒有想到)。謝謝! – tehsockz

+1

我認爲這也是正確的邏輯。爲了補充這一點,如果您只希望某些日期時間被認爲是不可接受的,則更改條件邏輯以準確匹配可接受的內容。 – xshoppyx

+0

我添加了更多的登錄信息,以允許禁用此檢查以及轉發關鍵字參數。 –