दिलचस्प पोस्ट
जो तेज प्रदर्शन इंडेक्सऑफ़ ऑब्जेक्ट्स पासिंगटस्ट या फ़िल्टर किए गए हैंअरेयूजिंग प्रॉजेक्ट? शेल स्क्रिप्ट से जांचना यदि कोई निर्देशिका फ़ाइलें शामिल है कोयोनर 2 / टाइपस्क्रिप्ट में एक वैश्विक चर घोषित करने का सबसे अच्छा तरीका क्या है .NET का उपयोग करते हुए किसी विशेष प्रक्रिया से संबंधित सभी खिड़कियां कैसे गणना करें? कक्षा पद्धतियों के रूप में एरो फ़ंक्शंस (सार्वजनिक वर्ग फ़ील्ड) का उपयोग कैसे करें? कॉरस: प्रवेश-नियंत्रण-अनुमति-मूल में वाइल्डकार्ड का उपयोग नहीं किया जा सकता है, जब क्रेडेंशियल्स ध्वज सच है एक अन्य वर्ग से एक चर तक पहुंच अजगर: सूची संकेतों में लैम्ब्डा फ़ंक्शन जार पुस्तकालयों को एंड्रॉइड-स्टूडियो में आयात करना एक चमकदार ऐप में बने भूखंड सहेजें पायथन 3 में sys.stdout एन्कोडिंग कैसे सेट करें? तुच्छ बनाम मानक लेआउट बनाम पीओडी मॉनिटर बनाम लॉक प्रोग्रामेटिक रूप से संबंधित लेआउट में एक दूसरे के नीचे देखें डब्ल्यू चार्ज, एन्कोडिंग्स, स्टैंडर्ड और पोर्टेबिलिटी

कैलेंडर गलत महीने देता है

Calendar rightNow = Calendar.getInstance(); String month = String.valueOf(rightNow.get(Calendar.MONTH)); 

उपर्युक्त स्निपेट के निष्पादन के बाद, माह 11 की बजाय 10 का मान हो जाता है। कैसे आते हैं?

वेब के समाधान से एकत्रित समाधान "कैलेंडर गलत महीने देता है"

महीनों को 1 से नहीं अनुक्रमित किया जाता है, इसलिए 10 नवंबर और 11 दिसम्बर होंगे।

वे 0 से शुरू करते हैं – डॉक्स की जांच करें

जैसा कि कई जवाबों से स्पष्ट है: महीने 0 से शुरू होता है

यहाँ एक टिप है: आपको स्ट्रैग-महीने का प्रतिनिधित्व करने के लिए SimpleDateFormat का उपयोग करना चाहिए:

 Calendar rightNow = Calendar.getInstance(); java.text.SimpleDateFormat df1 = new java.text.SimpleDateFormat("MM"); java.text.SimpleDateFormat df2 = new java.text.SimpleDateFormat("MMM"); java.text.SimpleDateFormat df3 = new java.text.SimpleDateFormat("MMMM"); System.out.println(df1.format(rightNow.getTime())); System.out.println(df2.format(rightNow.getTime())); System.out.println(df3.format(rightNow.getTime())); 

आउटपुट:

 11 Nov November 

नोट: आउटपुट भिन्न हो सकते हैं, यह लोकेल-विशिष्ट है

जैसा कि कई लोगों ने बताया है, जावा में कैलेंडर और दिनांक कक्षाओं द्वारा लौटाए गए महीने 1 के बजाय 0 से अनुक्रमित किए जाते हैं। इसलिए 0 जनवरी है, और वर्तमान माह, नवंबर, 10 है।

आपको आश्चर्य हो सकता है कि ऐसा क्यों होता है उत्पत्ति POSIX मानक फ़ंक्शन ctime , gmtime और localtime , जो निम्नलिखित क्षेत्रों ( man 3 ctime से ) के साथ time_t संरचना को स्वीकार या वापस लेती हैं :

 int tm_mday; /* day of month (1 - 31) */ int tm_mon; /* month of year (0 - 11) */ int tm_year; /* year - 1900 */ 

इस एपीआई को जावा 1.0 वर्ग में जावा डेस्ट क्लास में बिल्कुल कॉपी किया गया था, और वहां से जावा 1.1 में कैलेंडर क्लास में ज्यादातर बरकरार रहे। सूर्य ने कैलेंडर की शुरुआत करते समय सबसे ज्यादा निराशाजनक समस्या तय की – तथ्य यह है कि ग्रेगोरियन कैलेंडर में वर्ष 2001 को उनकी तिथि वर्ग में मान 101 द्वारा प्रतिनिधित्व किया गया था। लेकिन मुझे यकीन नहीं है कि उन्होंने दिन और महीनों के मूल्यों को क्यों नहीं बदला, कम से कम दोनों अपने अनुक्रमण में संगत रहे, या तो शून्य या एक से। इस विसंगति और संबंधित भ्रम अभी भी जावा (और सी) में आज भी मौजूद हैं।

सूचियों के लिए अनुक्रमित की तरह महीने शून्य से शुरू होते हैं।

इसलिए जन = 0, फरवरी = 1, आदि

एपीआई से:

वर्ष का पहला महीना जनवरी है जो 0 है; अंतिम एक वर्ष में महीनों की संख्या पर निर्भर करता है

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Calendar.html

tl; डॉ

 LocalDate.now() // Returns a date-only `LocalDate` object for the current month of the JVM's current default time zone. .getMonthValue() // Returns 1-12 for January-December. 

विवरण

अन्य उत्तर सही हैं लेकिन पुराने हैं।

परेशानी पुरानी तारीख समय कक्षाओं में कई खराब डिज़ाइन विकल्प और खामियां थीं। एक, शून्य से 1 महीने के मुकाबले 1 9 0 अंक की तुलना में महीनों की संख्या 0-11 पर आधारित थी।

java.time

Java.time फ्रेमवर्क जावा 8 और बाद में बनाया गया है। ये कक्षाएं पुरानी परेशानी तिथि-समय कक्षाएं जैसे कि java.util.Date ,। .Calendar , और java.text.SimpleDateFormat

अब रखरखाव मोड में , जोडा-टाइम प्रोजेक्ट भी जावा के समय प्रवास को सलाह देता है।

अधिक जानने के लिए, ओरेकल ट्यूटोरियल देखें। और कई उदाहरणों और स्पष्टीकरण के लिए स्टैक अतिप्रवाह खोजें।

ज्यादातर जावा। टाइम कार्यक्षमता को तीन-टेन-बैकपोर्ट में जावा 6 और 7 में बैक-पोर्ट किया गया है और इसे एंड्रॉइड के लिए तीन टाएंबैप में अनुकूलित किया गया है।

तीन टन अतिरिक्त परियोजना java.time को अतिरिक्त कक्षाओं के साथ बढ़ाता है। यह प्रोजेक्ट जावा के संभावित भावी परिवर्धन के लिए एक सिद्ध मैदान है।

महीने 1-12

Java.time में महीने की संख्या वास्तव में जनवरी-दिसंबर के लिए 1-12 की उम्मीद है।

LocalDate क्लास टाइम-ऑफ-दिवस के बिना और टाइम ज़ोन के बिना केवल-डेट मान का प्रतिनिधित्व करता है।

 LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) ); int month = today.getMonthValue(); // Returns 1-12 as values. 

यदि आप समय क्षेत्र के लिए एक तिथि-समय चाहते हैं, तो उसी तरह ZonedDateTime ऑब्जेक्ट का उपयोग करें।

 ZonedDateTime now = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ); int month = now.getMonthValue(); // Returns 1-12 as values. 

अगर आपके पास एक GregorianCalendar ZonedDateTime ऑब्जेक्ट है, तो पुराने कोड को जोड़ा गया toZonedDateTime नया उपयोग करने के लिए toZonedDateTime विधि में कनवर्ट करें। अधिक रूपांतरण जानकारी के लिए, java.util.Date को "java.time" प्रकार के रूप में परिवर्तित करें देखें ?

 ZonedDateTime zdt = myGregorianCalendar.toZonedDateTime(); int month = zdt.getMonthValue(); // Returns 1-12 as values. 

Month मात्रा

जावा.टाइम क्लासेस में आसान Month इंच शामिल है, जिस तरह से। अपने कोड को अधिक आत्म-दस्तावेजीकरण, टाइप-सुरक्षा प्रदान करने और मान्य मान सुनिश्चित करने के लिए केवल पूर्णांक के बजाय अपने कोड में इस वर्ग के उदाहरणों का उपयोग करें

 Month month = today.getMonth(); // Returns an instant of `Month` rather than integer. 

Month के स्थानीय नाम के साथ एक स्ट्रिंग उत्पन्न करने के लिए उपयोगी तरीके प्रदान करता है।

 cal.get(Calendar.MONTH) + 1; 

उपरोक्त विवरण महीने की सटीक संख्या देता है। जैसा get(Calendar.Month) महीने से 0 से शुरू होता है, परिणाम 1 में जोड़कर सही आउटपुट देता है। और माह की स्थापना के समय 1 को घटाना ध्यान में रखें।

 cal.set(Calendar.MONTH, (8 - 1)); 

या प्रदान किए गए निरंतर चर का उपयोग करें

 cal.set(Calendar.MONTH, Calendar.AUGUST); 

इसका इस्तेमाल करना बेहतर होगा

 Calendar.JANUARY 

जो शून्य है …