2013-07-02 9 views
7

का उपयोग कर वैध है या नहीं, मैं वर्ष और दिनांक निर्धारित करने के लिए कैलेंडर योजना का उपयोग करना चाहता हूं लेकिन दिनांक अमान्य होने पर किसी प्रकार का संकेत चाहता हूं उदा।यह जांचना कि कैलेंडर

calendar.set(2013,Calendar.JANUARY , 23) //is a valid date 
calendar.set(2013,Calendar.JANUARY , 33) //is not 

मैं calendar.setLenient(false) की स्थापना की और उम्मीद कि जनवरी 33 वीं करने के लिए मान सेट एक अपवाद फेंक होगा, लेकिन ऐसा नहीं किया।

उत्तर

8

यह जांच lazily किया जाता है लगता है:

एक गैर उदार ग्रेगोरी कैलेंडर की गणना अपने समय या कैलेंडर फ़ील्ड मान यदि कोई बाहर के रेंज क्षेत्र मूल्य निर्धारित किया गया है पर एक अपवाद फेंकता है।

Calendar c = new GregorianCalendar(); 
c.setLenient(false); 
c.set(2013, Calendar.JANUARY, 33); 
c.getTime(); 

लेकिन नहीं getTime बिना:

तो यह आप एक अपवाद फेंक देते हैं।

+0

+1 बिल्कुल सही। JDK में कैलेंडर सबसे टूटी कक्षा है, इसके कई कारणों में से एक। (जोडाटाइम का प्रयोग करें!) – Bohemian

3

लेनदेन केवल नियंत्रित करता है कि कैलेंडर ऑफ़-ऑफ़-रेंज तिथियों को स्वीकार करता है या नहीं। यदि उदारता निर्धारित की जाती है, तो जावा आउट ऑफ़ द रेंज तिथियों को समायोजित करने के लिए कुछ गणित करेगा (उदाहरण के लिए, 2013-12-32 2014-01-01 बन जाता है)। यदि उदारता सेट नहीं की जाती है, तो जावा इसकी अनुमति नहीं देगा, लेकिन जब तक आप वास्तव में कुछ फ़ील्ड का अनुरोध नहीं करते हैं, तब तक यह आउट-ऑफ-रेंज डेटा की जांच नहीं करता है। Javadocs से:

एक गैर उदार ग्रेगोरी कैलेंडर की गणना अपने समय या कैलेंडर फ़ील्ड मान यदि कोई बाहर के रेंज क्षेत्र मूल्य निर्धारित किया गया है पर एक अपवाद फेंकता है।

मैं इस संभाल कैसे करूँ:

अपने प्रश्न तो करने के लिए

?

आप महीने के पहले करने के लिए कैलेंडर सेट कर सकते हैं:

calendar.set(2013, Calendar.JANUARY, 1); 

और फिर

int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); 

आह्वान और अपने दिन मूल्य के खिलाफ की तुलना करें। यदि आपका दिन मूल्य सीमा में है, तो आप आगे बढ़ सकते हैं।

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