2017-03-17 38 views
1

使用dateutil.parser遺漏值我使用python dateutil規範日期格式,理想的情況是,我把所有的時間:處理在python

from dateutil.parser import parse 
date1 = '2012/01/02' 
parse(date1) 
datetime.datetime(2012, 1, 2, 0, 0) 

但是,這並不適用於所有記錄的情況下, ,有2個情況下,我想處理:

第一,無效值:

date2 = '2012/19/01' 
parse(date2) 
ValueError: month must be in 1..12 

date2 = '2012/1/00' 
parse(date2) 
ValueError: day is out of range for month 

對於那些情況下,我還是希望有任何一個數據是可用的,第一個例子的一年,第二年和第二年。

第二種情況下,缺失值:

date3 = '/1/10' 
parse(date3) 
datetime.datetime(2017, 1, 10, 0, 0) 

如果日期,月份或年份不可用,我不想讓當前的年,月,日沒有得到通知,我需要使用默認這些案件的價值。

+2

? 這裏的'parse'是什麼?你可以請解析函數定義 – saikumarm

+0

@saikumarm從dateutil.parser導入解析 –

回答

2

也許你應該寫一個解析器方法,其中檢查出的輸入字符串,並用默認值替換非法日期:

from datetime import datetime 
default=['2017','1','1'] 

def paretime(t): 
    i=t.split('/') 
    if len(i)<3: 
     return None 
    y,m,d = i 
    if y not in range(1,2018): 
     y=default[0] 
    if m not in range(1, 13): 
     m=default[1] 
    if d not in range(1, 32): 
     d=default[2] 
    return datetime.strptime("-".join([y,m,d]), '%Y-%m-%d') 


print paretime('/1/1') 

輸出:

2017-01-01 00:00:00 

或者

default=['2017','1','1'] 
from datetime import datetime 

def paretime(t): 
    d={i:j for i,j in enumerate(t.split('/')) if i==0 and j in (1,2018) if i==1 and j in (1,13) if i==2 and j in (1,32)} 
    return datetime.strptime("-".join([d.get(0,default[0]),d.get(1,default[1]),d.get(2,default[2])]), '%Y-%m-%d') 

print paretime('/41/0') 

輸出:

2017-01-01 00:00:00 

希望這會有所幫助。