मुझे दिनांक ऑब्जेक्ट ( java.util.Date) से पूर्णांक के रूप में महीना कैसे मिलेगा ?
मुझे दिनांक ऑब्जेक्ट ( java.util.Date) से पूर्णांक के रूप में महीना कैसे मिलेगा ?
जवाबों:
आप जावा 8 में java.time पैकेज का भी उपयोग कर सकते हैं और अपने java.util.Dateऑब्जेक्ट को ऑब्जेक्ट में बदल सकते हैं java.time.LocalDateऔर फिर बस getMonthValue()विधि का उपयोग कर सकते हैं ।
Date date = new Date();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
int month = localDate.getMonthValue();
ध्यान दें कि महीने के मूल्य यहां 1 से 12 के बीच दिए गए हैं, cal.get(Calendar.MONTH)जो एड्रश के उत्तर में दिए गए हैं, जो 0 से 11 तक मान देता है।
लेकिन जैसा कि तुलसी बोर्के ने टिप्पणियों में कहा, पसंदीदा तरीका विधि के Monthसाथ एक एनम ऑब्जेक्ट प्राप्त करना LocalDate::getMonthहै।
ZoneId.of( "America/Montreal" )।
Monthएनम ऑब्जेक्ट प्राप्त कर सकते हैं । विधि Month m = localDate.gotMonth();देखें LocalDate::getMonth। इस तरह की वस्तुओं का उपयोग करना आपके कोड को स्व-दस्तावेजीकरण बनाता है, प्रकार-सुरक्षा सुनिश्चित करता है, और मान्य मूल्यों की गारंटी देता है। Oracle द्वारा Enum ट्यूटोरियल देखें ।
date.toInstant()और आप एक java.sql.Date(के बच्चे java.util.Date) के साथ काम कर रहे हैं तो आपको ए UnsupportedOperationException। कोशिशnew java.sql.Date(src.getTime()).toLocalDate()
java.sql.Dateपुराने वर्ग में जोड़े गए नए रूपांतरण विधियों का उपयोग करके / से कन्वर्ट करने में बहुत आसान । java.sql.Date.valueOf( myLocalDate )और myJavaSqlDate.toLocalDate() इसके अलावा, JDBC ड्राइवर्स JDBC 4.2 या बाद के अपडेट के लिए अब किसी java.sqlप्रकार की आवश्यकता नहीं है , और सीधे तरीके और विधियों के java.timeमाध्यम से पता कर सकते हैं । ResultSet::getObjectPreparedStatement::setObject
java.util.Date date= new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int month = cal.get(Calendar.MONTH);
Calendar.MONTHकोई स्पष्ट कारणों के लिए शून्य आधारित नहीं है, अर्थात जनवरी == 0। अब यह एपीआई में ठीक दस्तावेज है, लेकिन यह अभी भी पहली बार उपयोगकर्ताओं के लिए नरक के रूप में भ्रमित है। मुझे अभी तक ऐसा कोई भी नहीं मिला है जो मुझे बता सके कि वे इसके साथ क्यों गए - शायद एक नए SO प्रश्न के लिए समय खुद (हालांकि मुझे डर है कि इसके लिए कोई महान पृष्ठभूमि नहीं है: /)
getYear()भी, "बिना किसी स्पष्ट कारणों के", १ ९ ०० तक घटाया गया।
यदि आप Java 8 डेट एपीआई का उपयोग करते हैं , तो आप इसे सीधे एक लाइन में प्राप्त कर सकते हैं!
LocalDate today = LocalDate.now();
int month = today.getMonthValue();
वैकल्पिक रूप से, जोडा-टाइम DateTime क्लास के साथ।
//convert date to datetime
DateTime datetime = new DateTime(date);
int month = Integer.parseInt(datetime.toString("MM"))
... या ...
int month = dateTime.getMonthOfYear();
DateTimeइसके महीने के लिए वस्तु पूछें । int month = dateTime.getMonthOfYear();
.toString("MM")क्योंकि यह दिखाता है कि "एमएम" की तुलना में अधिक संभावनाएं हैं।
DateTimeZoneउस DateTime कंस्ट्रक्टर को एक ऑब्जेक्ट पास करने का सुझाव देता हूं DateTimeZone.forID( "America/Montreal" ):।
myUtilDate.toInstant() // Convert from legacy class to modern. `Instant` is a point on the timeline in UTC.
.atZone( // Adjust from UTC to a particular time zone to determine date. Renders a `ZonedDateTime` object.
ZoneId.of( "America/Montreal" ) // Better to specify desired/expected zone explicitly than rely implicitly on the JVM’s current default time zone.
) // Returns a `ZonedDateTime` object.
.getMonthValue() // Extract a month number. Returns a `int` number.
java.time विवरणउत्तर प्रयोग करने के लिए Ortomala Lokni द्वारा java.time सही है। और आपको java.time का उपयोग करना चाहिए क्योंकि यह पुराने java.util.Date/.Calendar वर्गों पर एक विशाल सुधार है। देखें ओरेकल ट्यूटोरियल java.time पर।
मैं कुछ कोड दिखाऊंगा कि java.time का उपयोग कैसे करें java.util.ate के संबंध के बिना, जब आप नए सिरे से कोड के साथ शुरुआत कर रहे हों।
संक्षेप में java.time का उपयोग करना ... InstantUTC में समय पर एक क्षण है। ए ZoneIdपाने के लिए एक समय क्षेत्र ( ) लागू करेंZonedDateTime ।
Monthवर्ग एक परिष्कृत है enum सामान्य रूप में एक महीने का प्रतिनिधित्व करने के। उस enum में स्थानीय नाम प्राप्त करने जैसे आसान तरीके हैं। और बाकी का आश्वासन दिया है कि java.time में महीने की संख्या java.util.Date/.Calendar में पाया गया शून्य-आधारित बकवास (0-11) नहीं, बल्कि एक 1-12 है।
वर्तमान तिथि-समय प्राप्त करने के लिए, समय क्षेत्र महत्वपूर्ण है। किसी भी समय दुनिया भर में तारीख समान नहीं है। इसलिए महीने के अंत / शुरुआत के पास अगर दुनिया भर में महीने समान नहीं हैं।
ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or 'ZoneOffset.UTC'.
ZonedDateTime now = ZonedDateTime.now( zoneId );
Month month = now.getMonth();
int monthNumber = month.getValue(); // Answer to the Question.
String monthName = month.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH );
Java.time ढांचे जावा 8 और बाद में बनाया गया है। इन कक्षाओं परेशानी वर्ष प्रतिस्थापित विरासत जैसे तिथि-समय कक्षाएं java.util.Date, Calendar, और SimpleDateFormat।
Joda समय परियोजना, अब में रखरखाव मोड , प्रवास करने की सलाह देता java.time कक्षाएं।
अधिक जानने के लिए, Oracle ट्यूटोरियल देखें । और कई उदाहरणों और स्पष्टीकरणों के लिए ढेर अतिप्रवाह खोजें। विशिष्टता JSR 310 है ।
आप अपने डेटाबेस से सीधे java.time वस्तुओं का आदान-प्रदान कर सकते हैं । JDBC 4.2 या उसके बाद के JDBC ड्राइवर का अनुपालन करें । तारों की कोई जरूरत नहीं, कक्षाओं की कोई जरूरत नहीं ।java.sql.*
Java.time कक्षाएं कहाँ से प्राप्त करें?
ThreeTen-अतिरिक्त परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के लिए भविष्य के संभावित अतिरिक्त के लिए एक साबित जमीन है। आप यहाँ कुछ उपयोगी वर्गों जैसे मिल सकता है Interval, YearWeek, YearQuarter, और अधिक ।
यदि आप जोडा समय का उपयोग नहीं कर सकते हैं और आप अभी भी अंधेरी दुनिया में रहते हैं :) (जावा 5 या उससे कम) आप इसका आनंद ले सकते हैं:
नोट: सुनिश्चित करें कि आपकी तिथि पहले से ही प्रारूप द्वारा बनाई गई है: dd / MM / YYYY
/**
Make an int Month from a date
*/
public static int getMonthInt(Date date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("MM");
return Integer.parseInt(dateFormat.format(date));
}
/**
Make an int Year from a date
*/
public static int getYearInt(Date date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");
return Integer.parseInt(dateFormat.format(date));
}
Date mDate = new Date(System.currentTimeMillis());
mDate.getMonth() + 1
लौटाया गया मान 0 से शुरू होता है, इसलिए आपको परिणाम में एक जोड़ना चाहिए।
new Date()बिना समय बिताए वर्तमान समय के साथ तारीख कर सकते हैं System.currentTimeMillis। दूसरा यह है कि गेटमार्ट को हटा दिया गया है।