2017-04-05 9 views
0

私は豊富なオプションを試して、いくつかのハッキングされた解析のようにしましたが、strptimeでこれをどうやって行うのですか?私は、各試みのために何を得るstrptimeどのように解析するか:01/Jul/1995:00:00:01-0400

item = "01/Jul/1995:00:00:01-0400" 

checkdate = datetime.strptime(item,"%Y-%m-%dT:%H:%M%S%z") 
checkdate = datetime.strptime(item,"%Y/%m/%dT:%H:%M:%S%z") 
checkdate = datetime.strptime(item,"%Y-%b-%d:%H:%M%S%z") 
checkdate = datetime.strptime(item,"%Y-%b-%dT:%H:%M:%S%z") 
checkdate = datetime.strptime(item,"%Y/%m/%d:%H:%M:%S%z") 

は次のとおりです。

ValueError: time data '01/Jul/1995:00:00:01-0400' does not match format '%Y/%m/%d:%H:%M:%S%z' 

このため、フォーマット正しいのstrptimeは何ですか?

EDIT: はそうあなたが正しかったと私は小さなテスト

def split_date (stringdate):  
    datepart = [] 
    monthDict = {'Jan':'01','Feb':'02','Mar':'03','Apr':'04','May':'05', 
'Jun':'06','Jul':'07','Aug':'08','Sep':'09','Oct':'10','Nov':'11','Dec':'12'} 
    split1 = [part for part in stringdate.split('/')] 
    day = split1[0] 
    month = split1[1] 
    month = monthDict.get(month) 
    split2 = [part for part in split1[2].split(":")] 
    year = split2[0] 
    hour = split2[1] 
    minute = split2[2] 
    split3 = [part for part in split2[3].split('-')] 
    second = split3[0] 
    timezone = split3[1] 
    return datetime(int(year), int(month), int(day), int(hour), int(minute), int(second), int(timezone) 

datetime_received_split = [] 
datetime_received_strp = [] 
s = time.time() 
for date in data.time_received: 
    try: 
     datetime_received_split.append(split_date(date)) 
    except: 
     split_fail.append(date) 
e = time.time() 
print ('split took {} s '.format(e-s)) 
s = time.time() 
for date in data.time_received: 
    try: 
      datetime_received_strp.append(datetime.strptime(item,"%d/%b/%Y:%H:%M:%S-  %f")) 
    except: 
     strp_fail.append(date) 
e = time.time() 
print ('strp took {} s'.format(e-s)) 

を行なったし、私は手動分割が大きなマージンによって、実際に速いことがわかりましたか?

+0

実際にデータと一致するものを試しましたか?すべての試みは、年である '%Y'で始まり、文字列は月の日 '%d'で始まります。フォーマット文字列を作成してみてください。[documentation](https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior) – excaza

答えて

0

日付の変換を修正しました。素晴らしいことは%fがPython 2.7と3.xの両方でサポートされていることです。

from datetime import datetime 

item = "01/Jul/1995:00:00:01-0400" 
checkdate = datetime.strptime(item,"%d/%b/%Y:%H:%M:%S-%f") 

print(checkdate) 
+0

ありがとうございます!今はそんなに意味がある –

1

%zはPython 3.2以降でサポートされています。

from datetime import datetime 

item = "01/Jul/1995:00:00:01-0400" 
checkdate = datetime.strptime(item,"%d/%b/%Y:%H:%M:%S%z") 

print(checkdate) 

結果:

1995-07-01 00:00:01-04:00 

Python2.xためので

は、あなたがPython3.xを使用している場合は、これを試すことができ How to parse dates with -0400 timezone string in python?

を見てstrftime() and strptime() Behaviorから詳細を見る

関連する問題