2012-11-06 24 views
9

यह शायद एक बहुत ही बुनियादी सवाल यह है, लेकिन दस्तावेज़ को पढ़ने के बाद मैं अभी भी इसे कैसे करना समझ नहीं कर सकते हैं ...डेटाटाइम ऑब्जेक्ट्स के लिए "अज्ञात प्रारूप" तारों को कनवर्ट करें?

मैं अजगर में दो तार कि अज्ञात स्वरूप की तारीखों को शामिल किया है। मुझे नहीं पता कि वे किस प्रारूप में हैं, सिवाय इसके कि मुझे पता है कि दोनों मान्य दिनांक-समय अभिव्यक्तियां हैं। उदाहरण के लिए, उनमें से एक आईएसओ प्रारूप में हो सकता है और दूसरा कुछ अन्य प्रारूप में हो सकता है।

मुझे बस तिथियों की तुलना करने में सक्षम होना चाहिए। तारों को उपयुक्त दिनांक-समय वस्तुओं में बदलने का सही तरीका क्या है ताकि उनकी तुलना की जा सके?

धन्यवाद!

+2

मैं शीर्षक अद्यतन; मुद्दा "डेटाटाइम स्ट्रिंग की तुलना नहीं कर रहा है", यह "स्ट्रिंग्स को तुलनीय मान में परिवर्तित कर रहा है"। –

उत्तर

16

dateutil module में एक तारीख पार्सर है जो कई प्रारूपों में दिनांक तारों को पार्स कर सकता है।

उदाहरण के लिए

,

In [13]: import dateutil.parser as parser 

In [14]: parser.parse("19970902T090000") 
Out[14]: datetime.datetime(1997, 9, 2, 9, 0) 

In [15]: import datetime as dt 

In [16]: now = dt.datetime.now() 

In [17]: now.isoformat() 
Out[18]: '2012-11-06T15:08:51.393631' 

In [19]: parser.parse('2012-11-06T15:08:51.393631') 
Out[19]: datetime.datetime(2012, 11, 6, 15, 8, 51, 393631) 

In [20]: parser.parse('November 6, 2012') 
Out[20]: datetime.datetime(2012, 11, 6, 0, 0) 

ध्यान दें कि कुछ datetime तार अस्पष्ट हो सकता है: 10-09-2003 उदाहरण के लिए, 9 अक्टूबर या 10 सितंबर अर्थ हो सकता है। dateutildayfirst और yearfirst जैसे पैरामीटर इस संभाल करने के लिए है:

In [21]: parser.parse("10-09-2003") 
Out[21]: datetime.datetime(2003, 10, 9, 0, 0) 

In [22]: parser.parse("10-09-2003", dayfirst = True) 
Out[22]: datetime.datetime(2003, 9, 10, 0, 0) 

In [23]: parser.parse("10-09-03", yearfirst = True) 
Out[23]: datetime.datetime(2010, 9, 3, 0, 0)