2017-06-23 47 views
0

我一直在使用日期時間模塊來檢查日期,看它們是以mm/dd/yyyy還是mm/dd/yy格式。問題在於,%d和%m指令不夠靈敏,無法檢測月份或日期是否爲單個數字,這是我的要求。datetime - 如何要求2位數的日期和月份?

datetime.strptime('01/01/2001', '%m/%d/%Y') 

作品就像我想讓它,但

datetime.strptime('1/1/2001', '%m/%d/%Y') 

也產生一個有效的日期時間,當我真的希望它拋出一個ValueError除非月和日是填充0。有誰知道如何設置日期時間格式所需的精度?這是可能的,或者我應該用正則表達式來代替嗎?

+1

看看這個:http://strftime.org/。這可能與您所在的平臺有關。 ''%-m /% - d /%Y'' – Nicarus

+1

我認爲不能用'datetime'嚴格檢查這個問題。相關問題:[如何讓datetime.strptime解析零填充十進制數字](https://stackoverflow.com/questions/33035441/how-to-let-datetime-strptime-parse-zero-padded-decimal-number -only) – Delgan

回答

1

您使用的datetime函數不是爲了驗證輸入,而僅用於將字符串轉換爲datetime對象。就你的例子而言,你的兩個例子都是合法的字符串輸入。

如果要強制用戶輸入的是一個特定的格式,我會去與一個正則表達式 - 看到我的REPL這個例子:

>>> import re 
>>> pattern = re.compile(r"^[0-9]{2}/[0-9]{2}/[0-9]{4}$") 
>>> def valid_datestring(datestring): 
...  if pattern.match(datestring): 
...   return True 
...  return False 
... 
>>> valid_datestring('1/1/2001') 
False 
>>> valid_datestring('01/01/2001') 
True 

如果要定義返回格式化的日期函數或返回一個valueError,你可以這樣做:

def format_datestring(datestring): 
    if not valid_datestring(datestring): 
     raise ValueError('Date input must be in the form dd/mm/yyyy!') 
    return datetime.strptime(datestring, '%m/%d/%Y') 
+1

是的,我認爲這是這種情況,我只是以爲我已經閱讀過有關在日期時間格式設置精度的地方。謝謝,這有幫助! – zyd

相關問題