2012-03-01 17 views
37

Ben ÇEŞİTLİ biçimlerde dizi olarak datetime kabul (Python ile geliştirilmiş) bir sistem var ve var ayrıştırma için them..Currently datetime dize biçimleri şunlardır:Python'da datetime ayrıştırma ..?

Şimdi
Fri Sep 25 18:09:49 -0500 2009 

2008-06-29T00:42:18.000Z 

2011-07-16T21:46:39Z 

1294989360 

i jenerik istiyorum Bu datetime formatlarından herhangi birini uygun datetime nesnesine dönüştürebilen ayrıştırıcı ...

Aksi takdirde, bunları ayrı ayrı ayrıştırmak zorundayım. Bu yüzden lütfen ayrı ayrı ayrıştırmak için bir yöntem sağlayın (eğer jenerik ayrıştırıcı yoksa) .. !!

cevap

52

, dateutil paketi doğru ve otomatik olarak ilk 3 formatlarını çalıştırır, gitmek yoludur:

>>> from dateutil.parser import parse 
>>> parse("Fri Sep 25 18:09:49 -0500 2009") 
datetime.datetime(2009, 9, 25, 18, 9, 49, tzinfo=tzoffset(None, -18000)) 
>>> parse("2008-06-29T00:42:18.000Z") 
datetime.datetime(2008, 6, 29, 0, 42, 18, tzinfo=tzutc()) 
>>> parse("2011-07-16T21:46:39Z") 
datetime.datetime(2011, 7, 16, 21, 46, 39, tzinfo=tzutc()) 

o kadar hödük gibi görünüyor unixtime biçim ama neyse standart datetime.datetime

>>> from datetime import datetime 
>>> datetime.utcfromtimestamp(float("1294989360")) 
datetime.datetime(2011, 1, 14, 7, 16) 

her 4 biçimlerini işleme bunun dışında bir işlev yapmak oldukça kolaydır:

from dateutil.parser import parse 
from datetime import datetime 

def parse_time(s): 
    try: 
     ret = parse(s) 
    except ValueError: 
     ret = datetime.utcfromtimestamp(s) 
    return ret 
01 görev için kadardır
+0

aslında bu zaten ne yaptı, ne zaman @TimPietzcker önerdi ... u yorum görebilirsiniz ... !! .. ama müthiş cevap (ve kod açıklaması) için .. !! –

+0

Dateutil'ı yüklemek için: 'pip install python-dateutil'. Sanki "pip" ile nasıl kurulacağını teklif etmediklerinde yasal bir paket olmadığını düşünmenizi istiyorlar. – ArtOfWarfare

14

dateutil paketine bakmalısınız. @TimPietzcker önerildiği gibi

+6

özellikle 'dateutil.parser.parse()' – Kimvais

+0

cevap için thanx .. !! .. ama .. bir şey .. "dateutil.parser.parse" ilk 3 tarih biçimlerini ayrıştırıyor ... ama ayrıştırılamıyor son tarih formatı (ki bu uzun bir değerdir) .. "Aralık dışı bir yıl" gösteriliyor. İstisna ... Ama python datetime modülünde bu uzun değeri ayrıştırabiliyor .. neden bu kadar ..? –