बस अगर यह उत्तर किसी और की मदद करता है - मैं सोच रहा था कि मुझे शून्य गद्दी के साथ समस्या थी, लेकिन यह वास्तव में 12:00 बनाम 00:00 और %I
फ़ॉर्मेटर के साथ करना था ।
%I
फ़ॉर्मेटर 12 घंटे घड़ी घंटे से मिलान करने, वैकल्पिक रूप से शून्य गद्देदार लिए है। लेकिन आपके डेटा स्रोत के आधार पर, आपको डेटा मिल सकता है जो कहता है कि आधी रात या दोपहर वास्तव में शून्य है, उदाहरण के लिए:
>>> datetime.strptime('2015/01/01 0:12am', "%Y/%m/%d %I:%M%p")
ValueError: time data '2015/01/01 0:12am' does not match format '%Y/%m/%d %I:%M'
जो strptime
वास्तव में चाहता था वह 12 था, शून्य नहीं:
>>> datetime.strptime('2015/01/01 12:12am', "%Y/%m/%d %I:%M%p")
datetime.datetime(2015, 1, 1, 0, 12)
लेकिन हम हमेशा अपने डेटा स्रोतों को नियंत्रित नहीं करते हैं! इस किनारे के मामले के लिए मेरा समाधान अपवाद को पकड़ने के लिए था, इसे एक के साथ पार्स करने की कोशिश करें %H
, एक त्वरित जांच के साथ कि हम किनारे के मामले में हैं जो हमें लगता है कि हम अंदर हैं।
def get_datetime(string):
try:
timestamp = datetime.strptime(string, "%m/%d/%Y %I:%M%p")
except ValueError:
timestamp = datetime.strptime(string, "%m/%d/%Y %H:%M%p")
assert string.lower().endswith('am')
assert timestamp.hour == 0
return timestamp
0:12am
अमान्य इनपुट है। यह होना चाहिए12:12am
।11:59 pm
इसके बाद है12:00 am
, नहीं0:00am
। गलत समय प्रारूप में डेटा की आपूर्ति करने के विभिन्न तरीके हो सकते हैं। उदाहरण के लिए, इनपुट%y
चार अंकों के वर्ष (%Y
) या दिन / महीने के बजाय दो अंकों वाले वर्ष ( ) का उपयोग किया जा सकता है (%m/%d
बनाम%d/%m
), आदि दिन / महीने का मामला अस्पष्ट हो सकता है जैसे,2015/10/12
क्या यह "12 अक्टूबर" या "10 दिसंबर" है? btw, आपको इनपुट प्रारूप से मेल खाने के%Y/%m/%d
बजाय उपयोग करना चाहिए%m/%d/%Y
।