2014-03-03 67 views
5

我喜歡用dateutil.parser.parse模塊解析日期時間字符串。這很簡單。但是我注意到在我的代碼中,我必須檢查對象是否確實在8601(並意識到)。檢查日期時間字符串是否採用ISO 8601格式

我的結構是:

if parse(datetime).tzinfo==None: 
    #do something 
else: 
    #make it aware 
    #do something 

,我想實現的東西,如:

if <IS-8601>: 
    if parse(datetime).tzinfo==None: 
     #do something 
    else: 
     #make it aware 
     #do something 
else: 
    pass 

如果我有一個像8601例如2014-02-28T22:30:00+0200解析實用程序完成其工作。

如果我有2014-03-20字符串解析會在對象上添加時間。這不是錯,只是不想要的:2014-03-20 00:00:00


所以,我怎麼能檢查的對象是8601?如果在8601,它是否知道?我不介意改變到另一個日期時間庫。

+1

U可以使用正則表達式。 re.compile(r'^ \ d {4} - \ d {2} - \ d {2} [T] \ d {2}:\ d {2}:\ d {2} [+ - ] \ d {2}:\ d {2} $')' –

+0

不錯的,謝謝 – Diolor

+0

ISO 8601可以在末尾有時區字符,即'Z'而不是偏移量,也可以有毫秒。 –

回答

1

您可以通過日期時間模塊對其進行解析,並通過dateutil.parser.parse檢查處理之前例外ValueError

>>> import datetime 
>>> datetime.datetime.strptime("2014-03-20", '%Y-%m-%d') 
datetime.datetime(2014, 3, 20, 0, 0) 
>>> datetime.datetime.strptime("2014-02-28T22:30:00+0200", '%Y-%m-%d') 
Traceback (most recent call last): 
    File "<pyshell#134>", line 1, in <module> 
    datetime.datetime.strptime("2014-02-28T22:30:00+0200", '%Y-%m-%d') 
    File "C:\Python33\lib\_strptime.py", line 500, in _strptime_datetime 
    tt, fraction = _strptime(data_string, format) 
    File "C:\Python33\lib\_strptime.py", line 340, in _strptime 
    data_string[found.end():]) 
ValueError: unconverted data remains: T22:30:00+0200 
相關問題