जानने के बिना डेटटाइम का उपयोग करना। मेरे पास एक विधि है (कभी-कभी) "dddd MMMM dd"
(सोमवार 04 जनवरी) प्रारूप में एक स्ट्रिंग में ले जाती है जिसे डेटटाइम में पार्स करने की आवश्यकता होती है। मैं कभी-कभी कहता हूं क्योंकि यह मूल्य के रूप में "Today"
या "Tomorrow"
में भी पारित हो सकता है।दिनांक
इस संभाल करने के लिए कोड काफी सरल था:
if (string.Compare(date, "Today", true) == 0)
_selectedDate = DateTime.Today;
else if (string.Compare(date, "Tomorrow", true) == 0)
_selectedDate = DateTime.Today.AddDays(1);
else
_selectedDate = DateTime.Parse(date);
इस दिसंबर के मध्य तक काम किया। आप में से कुछ शायद पहले ही देख चुके हैं कि क्या गलत हुआ।
यह त्रुटि साथ नए साल में किसी भी तारीख पर विफल रहे हैं होगा:
"String was not recognized as a valid DateTime because the day of week was incorrect."
यह पारित कर दिया हो रही किया गया था "Monday January 04"
जो 2010 के लिए कोई मान्य दिनांक है, लेकिन में नहीं 2009
तो मेरी सवाल यह है: क्या वर्ष या तो अगले वर्ष या अगले वर्ष के लिए सेट करने का कोई तरीका है? अभी, एक त्वरित और गंदा ठीक है, मैं इस है:
if (!DateTime.TryParseExact(date, "dddd MMMM dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out _selectedDate))
if (!DateTime.TryParseExact(date + " " + (DateTime.Now.Year + 1), "dddd MMMM dd yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out _selectedDate))
throw new FormatException("That date is not valid.");
तो यह यह चालू वर्ष का उपयोग कर, और अगर यह असफल होने पर इसे फिर से अगले साल का उपयोग कर की कोशिश करेंगे पार्स करने के लिए कोशिश करेंगे। यदि उसके बाद यह विफल हो जाता है, तो यह अनुमान लगाएगा कि यह एक अमान्य तिथि है क्योंकि मुझे केवल 1 साल पहले चिंता करने की आवश्यकता है, लेकिन अगर किसी के पास अधिक लचीला समाधान है, तो मैं इसकी सराहना करता हूं। (ध्यान दें, मुझे पास होने वाली तारीख को सत्यापित करने के बारे में चिंता करने की आवश्यकता नहीं है, यह वर्तमान या अगले वर्ष के लिए मान्य होगा)।
+1000। यह एक आदर्श उदाहरण है जहां इकाई परीक्षण ने विकास चक्र –
में बहुत पहले समस्या का समाधान किया होगा उत्कृष्ट उत्तर के लिए धन्यवाद। यूनिट परीक्षण हैं, मैंने कभी इस परिदृश्य को कभी नहीं माना :(ऐसा कोई कारण नहीं है कि मैं दूसरे पर तारों की तुलना करने की एक विधि का उपयोग कर रहा हूं। मुझे यकीन नहीं था कि यह mattered है या नहीं। इसके अलावा, मुझे चिंता करने की ज़रूरत नहीं है पूर्व वर्ष में किसी तारीख को चुनने के लिए पूर्व वर्ष की अनुमति नहीं है। धन्यवाद। – Brandon
मुझे ब्रैकेट की आवश्यकता है (डेटटाइम.अब। प्रिय + 1) अन्यथा मैं अपने वर्ष के अंत में 1 के साथ समाप्त हुआ, उदाहरण के लिए 20181 –