2011-11-28 6 views
6

मैं जैसा कि नीचे दिखाया एक बयान का उपयोग एक स्ट्रिंग से एक datetime वस्तु बनाने के लिए: मेरे कोड का उपयोग करता है में कहीं बाद में`datetime.strftime` और` datetime.strptime` interprete% Y अलग ढंग से

t = datetime.strptime("0023-10-10", "%Y-%m-%d")

, t वस्तु और उसी प्रारूप तार के साथ strftime विधि आह्वान:

t.strftime("%Y-%m-%d")

यह एक ValueError: year=23 is before 1900; the datetime strftime() methods require year >= 1900 कारण बनता है।

ऐसा लगता है कि% Y इनपुट का सत्यापन इस दो समान तरीकों से अलग है। तो मुझे यकीन है कि मैं 23 जैसे कुछ बुरा साल को स्वीकार नहीं करते बनाने के लिए निम्नलिखित क्या करना है:

try: 
    format = "%Y-%m-%d" 
    t = datetime.strptime("0023-10-10", format) 
    t.strftime(format) 
except ValueError: 
    ... 

मुझे आश्चर्य है कि वहाँ इस सत्यापन करने के लिए एक बेहतर तरीका है।

उत्तर

4

मुझे इनपुट सत्यापित करने के लिए try..except का उपयोग करने का विचार पसंद है, क्योंकि पाइथन के कुछ भविष्य संस्करण में, < 1000 स्वीकार्य हो सकता है। कोड में

This comment बताता है कि यह प्रतिबंध पाइथन के वर्तमान कार्यान्वयन तक सीमित है।


अजगर 2.7 में, अपवाद years < 1900 के लिए होता है, लेकिन अजगर 3.2 में , अपवाद years < 1000 के लिए होती है:

import datetime as dt 
format = "%Y-%m-%d" 
t = dt.datetime.strptime("0023-10-10", format) 
try: 
    t.strftime(format) 
except ValueError as err: 
    print(err) 

प्रिंट

year=23 is before 1000; the datetime strftime() methods require year >= 1000 
+0

मुझे अभी भी समझ में नहीं आता कि यह प्रतिबंध 'strptime' पर क्यों लागू नहीं होता है। – satoru

+1

'datetime.strftime' अंततः कुछ सी फ़ंक्शन को कॉल करता है, 'strftime.' उपयोग किए गए कार्यान्वयन को Python के संस्करण के आधार पर वर्षों> = 1 9 00, या 1000 तक सीमित है। स्ट्रेटीम पाइथन में लागू किया गया है, और इसमें एक ही प्रतिबंध नहीं है। यह [सुविधा अनुरोध] देखें (http://bugs.python.org/issue1777412)। – unutbu

2

आप बस if t.year < 1900 देख सकते हैं और यदि यह एक त्रुटि लौटा है। जानबूझकर अपवाद का कारण बनने की जरूरत नहीं है।

+0

जवाब देने के लिए Thx। वैसे, क्या आपको कोई विचार है कि ये विधि अलग तरीके से क्यों व्यवहार करती है? – satoru

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