2012-03-01 24 views
37

मैं एक प्रणाली (अजगर में विकसित) कि विभिन्न स्वरूपों में स्ट्रिंग के रूप में datetime स्वीकार करता है और मेरे पास है पार्स करने के लिए them..Currently datetime स्ट्रिंग स्वरूप हैं:पायथन में पार्सिंग डेटाटाइम ..?

Fri Sep 25 18:09:49 -0500 2009 

2008-06-29T00:42:18.000Z 

2011-07-16T21:46:39Z 

1294989360 

अब मैं चाहता हूँ एक सामान्य पार्सर जो उचित डेटाटाइम ऑब्जेक्ट में इनमें से किसी भी डेटाटाइम प्रारूप को परिवर्तित कर सकता है ...

अन्यथा, मुझे उन्हें अलग-अलग पार्सिंग के साथ जाना होगा। इसलिए कृपया उन्हें व्यक्तिगत रूप से पार्स करने के लिए विधि भी प्रदान करें (यदि कोई सामान्य पार्सर नहीं है) .. !!

उत्तर

52

रूप @TimPietzcker का सुझाव दिया, dateutil पैकेज जाने का रास्ता है, यह पहले 3 प्रारूपों सही ढंग से और स्वचालित रूप से संभालती है:

>>> 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()) 

unixtime प्रारूप उस पर ऊपर देहाती रहा है, लेकिन सौभाग्य से मानक datetime.datetime

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

यह इस है कि सभी 4 प्रारूपों संभालती के बाहर एक समारोह बनाने के लिए नहीं बल्कि आसान है::

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 कार्य के लिए निर्भर है
+0

असल में यह वही है जो मैंने पहले ही किया था, जब @TimPietzcker ने सुझाव दिया था ... आप टिप्पणी में देख सकते हैं .. !! .. लेकिन भयानक उत्तर (और कोड विवरण) के लिए thanx .. !! –

+0

डेट्यूटिल स्थापित करने के लिए: 'पाइप इंस्टॉल पायथन-डेट्यूटिल'। ऐसा लगता है कि वे चाहते हैं कि आप यह सोचें कि यह एक वैध पैकेज नहीं है जब वे इसे 'पीआईपी' के माध्यम से स्थापित करने की पेशकश नहीं करते हैं। – ArtOfWarfare

14

आपको dateutil पैकेज में देखना चाहिए।

+6

विशेष रूप से 'dateutil.parser.parse()' – Kimvais

+0

उत्तर के लिए thanx .. !! .. लेकिन एक बात .. "dateutil.parser.parse" पहले 3 दिनांक स्वरूपों को पार्स कर रहा है .. लेकिन यह पार्स करने में सक्षम नहीं है अंतिम तिथि प्रारूप (जो एक लंबा मूल्य है) .. यह "सीमा से बाहर वर्ष" अपवाद दिखा रहा है ... लेकिन पाइथन इनबिल्ट डेटाटाइम मॉड्यूल इस लंबे मूल्य को पार्स करने में सक्षम है .. यह क्यों है .. ?? –

संबंधित मुद्दे