कैलेंडर से महीने का नाम कैसे प्राप्त करें


96

जब हम जानते हैं कि महीने का नाम पाने के लिए एक ऑन्लाइनर है int monthNumber = calendar.get(Calendar.MONTH)? या सबसे आसान तरीका क्या है?


3
@anyone_reaching_this_issue: इस सवाल ( stackoverflow.com/questions/6192781/month-name-as-a-string ) में उल्लेख मिलता हैDisplayName () और अन्य गहन चालें
Poutrathor

जवाबों:


99

आपको यह रास्ता भी मिलेगा।

  String getMonthForInt(int num) {
        String month = "wrong";
        DateFormatSymbols dfs = new DateFormatSymbols();
        String[] months = dfs.getMonths();
        if (num >= 0 && num <= 11 ) {
            month = months[num];
        }
        return month;
    }

6
DateFormatSymbols कार्यान्वयन को JDK 8 में बदल दिया गया था, इसलिए getMonths विधि सभी लोकेल के अब के लिए सही मान नहीं
लौटाती है

1
क्या आप JDK8 के लिए वर्कअराउंड / वर्किंग सॉल्यूशन दे सकते हैं?
डोमिनिक

आप एक महीने को संख्या के रूप में कब प्राप्त करेंगे?
मिकी पेरेलस्टीन

अपने प्रश्न का उत्तर देने के लिए मिकी, यहां बताया गया है कि आप महीने को इंट के रूप में कैसे प्राप्त करते हैं और इसका उपयोग करते हैं - सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] आर्ग्स) {इंट महीने; ग्रेगोरियन कैलेन्डर की तारीख = नया ग्रेगोरियन कैलेन्डर (); महीना = तारीख.गेट (कैलेंडर.मोन्ट); System.out.println ("वर्तमान महीना" + (महीना + 1) + "है और माह का नाम" + getMonthForInt (महीना)) है; } स्थिर स्ट्रिंग getMonthForInt (int संख्या) {स्ट्रिंग महीना = "गलत"; DateFormatSymbols dfs = नई DateFormatSymbols (); स्ट्रिंग [] महीनों = dfs.getMonths (); अगर (संख्या> = 0 && संख्या <= 11) {माह = महीने [संख्या]; } महीने वापस; }
अजय कुमार

193

आप इसे SimpleDateFormat का उपयोग करके प्राप्त कर सकते हैं , जो कि दिनांक और समय को प्रारूपित करने के लिए है।

Calendar cal = Calendar.getInstance();
System.out.println(new SimpleDateFormat("MMM").format(cal.getTime()));

यह काम करेगा लेकिन मैं स्ट्रिंग पुनः प्राप्त करना चाहूंगा। उस महीने का जब मुझे इसका सूचकांक पता है। मुझे लगता है कि मैं अन्य दृष्टिकोणों का उपयोग करूंगा, धन्यवाद।
ओगज़्ड

47
इससे मुझे वर्तमान माह का नाम प्राप्त करने में मदद मिली। हालांकि मैंने एक छोटा के बजाय पूरे महीने का नाम पाने के लिए ("MMMM") का उपयोग किया।
स्पीडनोमैड्स

77

यह जितना सरल है

mCalendar = Calendar.getInstance();    
String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());

4
कैलेंडर अमूर्त का उपयोग मेरी राय में सबसे सुरुचिपूर्ण समाधान है। +1
सेबस्टियन

2
गलत! समस्या मामलों वाली भाषाओं में होगी। उदाहरण के लिए, स्लाव स्थानों में यह जननांग के मामले में महीना लौटेगा, उदाहरण के लिए, आरयू-आरयू लोकेल में अक्टूबर के октябряबजाय आपको प्राप्त होगा Октябрь, जिसकी आप उम्मीद करते हैं।
निक सिरियर

41

यह एक वर्ग परियोजना के लिए मेरे द्वारा लाया गया समाधान है:

public static String theMonth(int month){
    String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
    return monthNames[month];
}

आपके द्वारा पास किया गया नंबर Calendar.MONTHकॉल से आता है ।


2
यह मेरे लिए उपयोगी हैnew SimpleDateFormat("MMMM").format(cal.getTime());
प्रतीक बुटानी

इस एक कमजोर समाधान है, कैसे Jan, Feb आदि जनवरी फरवरी आदि के अलावा नहीं के बारे में यह सब स्थिति कवर नहीं किया जाएगा
अबीर zaroor

2
ठीक है, आपको महीने में 1 जोड़ना चाहिए। Arrays 0. से शुरू होता है
RoccoDev

यह बुरा है, आप जावा का फिर से आविष्कार कर रहे हैं?
मिकी पेरेलस्टीन

1
यह अंग्रेजी बोलने वाले उपयोगकर्ताओं के लिए काम करता है। दूसरों के बारे में क्या?
अद्वैत एस

33

यदि आपके पास बहु-भाषा इंटरफ़ेस है, तो आप getDisplayName का उपयोग महीने के नाम को प्रदर्शित करने के लिए भाषा के नियंत्रण के साथ कर सकते हैं।

यहाँ "सीरिया" जैसे विशिष्ट देश में अंग्रेजी, फ्रेंश, अरबी और अरबी में महीने का नाम प्रदर्शित करने का एक उदाहरण है:

    Calendar c = Calendar.getInstance();
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH ) );
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.FRANCE ) );
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, new Locale("ar") ) );
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, new Locale("ar", "SY") ) );
    System.out.println(c.getTime().toString());

परिणाम है:

  January
  janvier
  يناير
  كانون الثاني
  Sat Jan 17 19:31:30 EET 2015

यह कौन सा जावा संस्करण है?
मुहम्मद गालबाना

16
SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() );
dateFormat.format( date );

कुछ भाषाओं (जैसे रूसी) के लिए यह स्टैंड-अलोन महीने के नाम पाने का एकमात्र सही तरीका है।

यह वह है जो आपको मिलता है, यदि आप जनवरी getDisplayNameसे Calendarया इसके DateFormatSymbolsलिए उपयोग करते हैं :

января (जो पूर्ण तिथि स्ट्रिंग के लिए सही है: " 10 января, 2014 ")

लेकिन एक अकेले महीने के नाम के मामले में आप उम्मीद करेंगे:

январь


आरयू लोकेल के लिए एक सही उत्तर है। बहुत अजीब बात है, कि Android SDK में 'LLLL' युक्ति नहीं है।
अनफेट

12

Joda समय

कैसे उपयोग करने के बारे Joda समय । साथ काम करने के लिए यह एक बेहतर तारीख-समय एपीआई है (और Januaryइसका मतलब है कि यहां जीवित है। यह कैलेंडर की तरह नहीं है, जो 0-basedमहीनों के लिए सूचकांक का उपयोग करता है )।

आप AbstractDateTime#toString( pattern )निर्दिष्ट प्रारूप में दिनांक को प्रारूपित करने के लिए विधि का उपयोग कर सकते हैं :

DateTime date = DateTime.now();
String month = date.toString("MMM");

संख्या से महीने का नाम

यदि आप किसी विशेष महीने के लिए महीने का नाम चाहते हैं, तो आप इसे इस तरह से कर सकते हैं:

int month = 3;
String monthName = DateTime.now().withMonthOfYear(month).toString("MMM");

स्थानीय बनाना

उपरोक्त दृष्टिकोण महीने के नाम की भाषा के लिए आपके JVM के वर्तमान डिफ़ॉल्ट लोकेल का उपयोग करता है। आप इसके बजाय एक लोकेल ऑब्जेक्ट निर्दिष्ट करना चाहते हैं।

String month = date.toString( "MMM", Locale.CANADA_FRENCH );

1
धन्यवाद लेकिन मैं अपने पुराने के साथ खुश हूँ SimpleDateFormatऔरDate
ogzd

@ogzd। आपकी इच्छा। लेकिन तुम्हें यकीन है कि यह एक कोशिश देना चाहिए, और मुझे यकीन है कि आप इसे गाना पसंद करेंगे।
रोहित जैन

@ogzd। मैंने महीने की संख्या से महीने का नाम प्राप्त करने का तरीका पोस्ट किया। BTW, आप ऐसा क्यों करना चाहेंगे?
रोहित जैन

10

Month::getDisplayName

जावा 8 के बाद से, Monthएनम का उपयोग करें । getDisplayNameविधि स्वतः महीने के नाम localizes।

उत्तीर्ण करना:

  • यह TextStyleनिर्धारित करने के लिए कि कब तक या कैसे संक्षिप्त है।
  • एक Localeमानव अनुवाद में प्रयुक्त भाषा, और सांस्कृतिक मानदंडों संक्षिप्त नाम, विराम चिह्न, आदि के लिए इस्तेमाल किया निर्दिष्ट करने के लिए

उदाहरण:

public static String getMonthStandaloneName(Month month) {
    return month.getDisplayName(
        TextStyle.FULL_STANDALONE, 
        Locale.getDefault()
    );
}

9

यह एक पुराना प्रश्न हो सकता है, लेकिन महीने के नाम को प्राप्त करने के लिए एक लाइनर के रूप में जब हम सूचकांकों को जानते हैं, तो मैंने उपयोग किया

String month = new DateFormatSymbols().getMonths()[monthNumber - 1];

या छोटे नामों के लिए

String month = new DateFormatSymbols().getShortMonths()[monthNumber - 1];

कृपया ध्यान रखें कि आपकी monthNumberगिनती 1 से शुरू होती है जबकि ऊपर दी गई कोई भी विधि किसी सरणी को लौटाती है इसलिए आपको 0 से गिनती शुरू करने की आवश्यकता है।


3

इस कोड में भाषा का समर्थन है। मैंने उन्हें एंड्रॉइड ऐप में इस्तेमाल किया था।

String[] mons = new DateFormatSymbols().getShortMonths();//Jan,Feb,Mar,... 

String[] months = new DateFormatSymbols().getMonths();//January,Februaty,March,...

1
यह पूरी तरह से काम करता है, टिप्पणियाँ केवल एक छोटी सी पूरी तरह से गलत हैं हालांकि
Иво Недев

3

मुझे यह बहुत आसान लगा ( https://docs.oracle.com/javase/tutorial/datetime/iso/enum.html )

private void getCalendarMonth(Date date) {      
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    Month month = Month.of(calendar.get(Calendar.MONTH));       
    Locale locale = Locale.getDefault();
    System.out.println(month.getDisplayName(TextStyle.FULL, locale));
    System.out.println(month.getDisplayName(TextStyle.NARROW, locale));
    System.out.println(month.getDisplayName(TextStyle.SHORT, locale));
}

Monthजनवरी = 1 के साथ अपना सूचकांक शुरू नहीं करता है , जबकि कैलेंडर जनवरी = 0 से शुरू होता है? क्या जीवन Month.of(calendar.get(Calendar.MONTH));के मामले में असफल नहीं होगा ?
MCO

2

आप इसे इस तरह से एक लाइन प्राप्त कर सकते हैं: String monthName = new DataFormatSymbols.getMonths()[cal.get(Calendar.MONTH)]


2

यह मेरे लिए काम करता है:

String getMonthName(int monthNumber) {
    String[] months = new DateFormatSymbols().getMonths();
    int n = monthNumber-1;
    return (n >= 0 && n <= 11) ? months[n] : "wrong number";
}

"September"एक पंक्ति के साथ लौटने के लिए :

String month = getMonthName(9);

2

एक रास्ता:

हमारे पास Monthजावा ( java.time.Month) में एपीआई है । हम उपयोग करके प्राप्त कर सकते हैंMonth.of(month);

यहां, Monthसंख्याओं के रूप में अनुक्रमित हैं , इसलिए या तो आप Month.JANUARYउपरोक्त एपीआई में 1, 2, 3, 4 जैसे सूचकांक प्रदान कर सकते हैं या प्रदान कर सकते हैं ।

दूसरा तरीका:

ZonedDateTime.now().getMonth();

इसमें उपलब्ध है java.time.ZonedDateTime


1

मैंने इस विषय में प्रतिक्रियाओं के आधार पर एक कोटलिन एक्सटेंशन बनाया और DateFormatSymbols उत्तरों का उपयोग करके आपको एक स्थानीय प्रतिक्रिया मिली।

fun Date.toCalendar(): Calendar {
    val calendar = Calendar.getInstance()
    calendar.time = this
    return calendar
}


fun Date.getMonthName(): String {
    val month = toCalendar()[Calendar.MONTH]
    val dfs = DateFormatSymbols()
    val months = dfs.months
    return months[month]
}

1

इसने मेरे लिए काम किया

        import java.text.SimpleDateFormat;
        import java.util.Calendar;


        Calendar cal = Calendar.getInstance();
        String currentdate=new SimpleDateFormat("dd-MMM").format(cal.getTime());

0
DateFormat date =  new SimpleDateFormat("dd/MMM/yyyy");
Date date1 = new Date();
System.out.println(date.format(date1));

1
जबकि आपका उत्तर सही हो सकता है, यह खराब गुणवत्ता का है। कृपया विस्तृत करें कि यह उत्तर सही क्यों है।
SubliemeSiem

1
@SubliemeSiem मैं इसे पूरा करने के लिए प्रारूप और सरलतम तरीका बदलने की कोशिश कर रहा हूं: MM- यह महीने के नाम को 01, 02, 03 जैसे पूर्णांक में लौटाएगा। MMM-यह महीने का नाम संक्षेप में जान, फेब, विवाह की तरह लौटाएगा। MMMM- यह जनवरी जैसे स्ट्रिंग प्रारूप में पूरे महीने का नाम लौटाएगा।
अमित मिश्रा

तिथियों के प्रारूपण के लिए यह एकमात्र सही उत्तर है। दिनांक या कैलेंडर ऑब्जेक्ट का उपयोग करें और उसे फ़ॉर्मेटर के साथ प्रारूपित करें। सवाल ही BAD है
मिकी पेरेलस्टीन

0

यह महीने का अंग्रेजी नाम देता है। 04 APRIL और इतने पर रिटर्न।

String englishMonth (int month){
        return Month.of(month);
    }

सरल और सीधा सुझाव, धन्यवाद। आपका कोड संकलित नहीं करता है। आपको या तो रिटर्न प्रकार घोषित करना होगा या उसे वापस करने से पहले परिणाम पर Monthलागू toStringकरना होगा।
ओले वीवी

-3

SimpleDateFormat जावा डॉक्टर से:

*         <td><code>"yyyyy.MMMMM.dd GGG hh:mm aaa"</code>
 *         <td><code>02001.July.04 AD 12:08 PM</code>
 *         <td><code>"EEE, d MMM yyyy HH:mm:ss Z"</code>
 *         <td><code>Wed, 4 Jul 2001 12:08:56 -0700</code>

मैं यह नहीं देख सकता कि यह प्रश्न कैसे पूछा गया।
jhpg
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.