2011-02-08 14 views
45

दस्तावेज़ के अनुसार, कैलेंडर सेट() है:क्यों जावा कैलेंडर सेट (int वर्ष, int month, int date) सही तिथि नहीं लौटा रहा है?

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html#set%28int,%20int,%20int%29

set(int year, int month, int date) 
Sets the values for the calendar fields YEAR, MONTH, and DAY_OF_MONTH. 

कोड:

Calendar c1 = GregorianCalendar.getInstance(); 
c1.set(2000, 1, 30); //January 30th 2000 
Date sDate = c1.getTime(); 

System.out.println(sDate); 

उत्पादन:

Wed Mar 01 19:32:21 JST 2000 

यह 30 जनवरी क्यों नहीं है ???

+8

'का उपयोग कर java.util.Date' या' java.util.Calendar' किसी के लिए भी मानक सुझाव: Joda समय, उपलब्ध का उपयोग http://joda-time.sourceforge.net/ पर – mdrg

+7

महीने 0 से गिने जाते हैं , नहीं 1. हाँ, मुझे पता है - यह कष्टप्रद है। –

+0

मैं अब से हर फ्रेकिंग संभावित परियोजना के लिए जोड का उपयोग करना शुरू कर दूंगा, असंगतता और अजीबता की तिथि और कैलेंडर के साथ अजीबता बहुत अधिक है! – Warpzit

उत्तर

90

1 महीने के लिए से फरवरी है। 30 फरवरी को 1 मार्च तक बदल दिया गया है। आपको महीने के लिए 0 सेट करना चाहिए। सर्वोत्तम कैलेंडर में परिभाषित निरंतर उपयोग करना है:

c1.set(2000, Calendar.JANUARY, 30); 
+0

धन्यवाद! इच्छा जावा डॉक्टर इस तरह के महत्वपूर्ण बिंदु जोर दे सकता है! (या मुझे याद आया ..?) –

+1

@ मासोटो-सान: आपने इसे याद किया, http://download.oracle.com/javase/6/docs/api/java/util/Calendar.html#set%28int,% 20int,% 20int% 29। –

17

कैलेंडर वस्तु में महीने शुरू 0

0 = January = Calendar.JANUARY 
1 = february = Calendar.FEBRUARY 
+0

लड़का आपने दिन बचाया – Qasim

6

उदाहरण में चयनित तिथि दिलचस्प है। उदाहरण कोड ब्लॉक है:

Calendar c1 = GregorianCalendar.getInstance(); 
c1.set(2000, 1, 30); //January 30th 2000 
Date sDate = c1.getTime(); 

System.out.println(sDate); 

और आउटपुट Wed Mar 01 19:32:21 JST 2000

जब मैं पहली बार उदाहरण पढ़ें मैं लगता है कि उत्पादन गलत है लेकिन यह सच है :)

  • Calendar.Month 0 से शुरू हो रहा है तो इसका मतलब है 1 फरवरी।
  • फरवरी अंतिम दिन 28 है इसलिए आउटपुट 2 मार्च होना चाहिए।
  • लेकिन चयनित वर्ष महत्वपूर्ण है, यह 2000 है जिसका मतलब 2 9 फरवरी है, इसलिए परिणाम 1 मार्च होना चाहिए।
संबंधित मुद्दे