मुझे दिनांक ऑब्जेक्ट ( 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::getObject
PreparedStatement::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 का उपयोग करना ... Instant
UTC में समय पर एक क्षण है। ए 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
। दूसरा यह है कि गेटमार्ट को हटा दिया गया है।