का उपयोग किये बिना पायथन में एक तारीख को पार्स करना मैं किसी तीसरे पक्ष फ़ीड से प्राप्त होने वाली कुछ तिथियों को पार्स करने के लिए पायथन के dateutil.parser
टूल का उपयोग कर रहा हूं। यह एक डिफ़ॉल्ट तिथि निर्दिष्ट करने की अनुमति देता है, जो आज के लिए डिफ़ॉल्ट रूप से चूक जाता है, पार्स किए गए दिनांक के गायब तत्वों को भरने के लिए। हालांकि यह सामान्य रूप से सहायक है, मेरे उपयोग के मामले में कोई सैन डिफ़ॉल्ट नहीं है, और मैं आंशिक तिथियों का इलाज करना पसंद करूंगा जैसे कि मुझे कोई तारीख नहीं मिली है (क्योंकि इसका लगभग हमेशा मतलब है कि मुझे डेटा खराब हो गया है)।डिफ़ॉल्ट
from dateutil import parser
import datetime
def parse_no_default(dt_str):
dt = parser.parse(dt_str, default=datetime.datetime(1900, 1, 1)).date()
dt2 = parser.parse(dt_str, default=datetime.datetime(1901, 2, 2)).date()
if dt == dt2:
return dt
else:
return None
(। यह स्निपेट केवल, तारीख पर लग रहा है के रूप में है कि सभी मैं अपने आवेदन के लिए के बारे में परवाह है, लेकिन इसी तरह के तर्क समय घटक शामिल करने के लिए बढ़ाया जा सकता है)
: मैं चारों ओर निम्नलिखित काम लिखा हैमैं सोच रहा हूं (उम्मीद कर रहा हूं) ऐसा करने का एक बेहतर तरीका है। एक ही स्ट्रिंग को दो बार देखने के लिए यह देखने के लिए कि क्या यह अलग-अलग डिफॉल्ट में भरता है, कम से कम कहने के लिए संसाधनों की सकल बर्बादी की तरह लगता है।
यहाँ अपेक्षित व्यवहार के लिए परीक्षण (nosetest जनरेटर का उपयोग) के सेट है:
import nose.tools
import lib.tools.date
def check_parse_no_default(sample, expected):
actual = lib.tools.date.parse_no_default(sample)
nose.tools.eq_(actual, expected)
def test_parse_no_default():
cases = (
('2011-10-12', datetime.date(2011, 10, 12)),
('2011-10', None),
('2011', None),
('10-12', None),
('2011-10-12T11:45:30', datetime.date(2011, 10, 12)),
('10-12 11:45', None),
('', None),
)
for sample, expected in cases:
yield check_parse_no_default, sample, expected
जो केवल खाली स्ट्रिंग केस हल करता है। जब मेरे पास आंशिक तिथि होती है, तो यह अभी भी फ़ील्ड को निर्दिष्ट नहीं कर रहा है, लेकिन डिफॉल्ट की तुलना में एक अलग अंतिम तिथि प्राप्त करता है। मैंने आवश्यकताओं को चित्रित करने के लिए प्रश्न में कुछ यूनिट परीक्षण जोड़े हैं और यह उदाहरण कहां विफल रहता है। हालांकि एक नज़र डालने के लिए धन्यवाद! –
स्पष्ट रूप से सावधान रहें, जाहिर है कि आपके पहले उदाहरण में आप डेटटाइम ऑब्जेक्ट के साथ डेट ऑब्जेक्ट की तुलना कर रहे हैं। यह हमेशा गैर बराबर होने जा रहा है। –