2012-02-08 40 views

回答

5

剛剛嘗試使用time模塊來解釋它,並抓住ValueError當轉換失敗提出:

>>> time.strptime('08:30', '%H:%M') 
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=30, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1) 
>>> time.strptime('08:70', '%H:%M') 
Traceback (most recent call last): 
    (...) 
ValueError: unconverted data remains: 0 
>>> time.strptime('0830', '%H:%M') 
Traceback (most recent call last): 
    (...) 
ValueError: time data '0830' does not match format '%H:%M' 

這不檢查的唯一的事情是,你實際上指定正確的位數。檢查len(time_string) == 5可能是否足夠簡單以檢查該問題。

編輯:靈感來自Kimvais的評論;以把它包裝成一個功能:

def is_hh_mm_time(time_string): 
    try: 
     time.strptime(time_string, '%H:%M') 
    except ValueError: 
     return False 
    return len(time_string) == 5 
+0

+1不表明正則表達式 – Kimvais 2012-02-08 09:14:02

+0

'除了ValueError異常:返回FALSE' – Kimvais 2012-02-08 09:15:40

+0

謝謝,它幫助:) – alwbtc 2012-02-08 09:33:08

2

您可以使用time.strptime

>>> help(time.strptime) 
Help on built-in function strptime in module time: 

strptime(...) 
    strptime(string, format) -> struct_time 

    Parse a string to a time tuple according to a format specification. 
    See the library reference manual for formatting codes (same as strftime()). 

要分析工作的時間字符串:如果你在一個時間字符串傳遞

>>> time.strptime('12:32', '%H:%M') 
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=12, tm_min=32, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1) 

無效,您將收到錯誤:

>>> time.strptime('32:32', '%H:%M') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python27\lib\_strptime.py", line 454, in _strptime_time 
    return _strptime(data_string, format)[0] 
    File "C:\Python27\lib\_strptime.py", line 325, in _strptime 
    (data_string, format)) 
ValueError: time data '32:32' does not match format '%H:%M' 

所以......你的函數看起來是這樣的:

def is_hh_mm(t): 
    try: 
     time.strptime(t, '%H:%M') 
    except: 
     return False 
    else: 
     return True 
+0

謝謝你的解釋:) – alwbtc 2012-02-08 09:33:30

相關問題