Come ottenere il nome del mese da Calendar


Risposte:


99

Otterrai anche in questo modo.

  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
L'implementazione di DateFormatSymbols è stata modificata in JDK 8, quindi il metodo getMonths non restituisce più valori corretti per tutte le
impostazioni

1
potresti dare una soluzione alternativa / funzionante per JDK8?
Dominik

quando prenderesti un mese come numero?
Mickey Perlstein

Mickey per rispondere alla tua domanda, ecco come ottieni month come int e usalo: public static void main (String [] args) {int month; GregorianCalendar date = new GregorianCalendar (); mese = date.get (Calendar.MONTH); System.out.println ("Il mese corrente è" + (mese + 1) + "e il nome del mese è" + getMonthForInt (mese)); } static String getMonthForInt (int num) {String month = "wrong"; DateFormatSymbols dfs = new DateFormatSymbols (); String [] months = dfs.getMonths (); if (num> = 0 && num <= 11) {mese = mesi [num]; } mese di ritorno; }
Ajay Kumar

192

puoi ottenerlo utilizzando SimpleDateFormat , che ha lo scopo di formattare la data e l'ora.

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

Funzionerà ma vorrei ottenere la stringa repr. del mese in cui ne conosco l'indice. Penso che userò gli altri approcci, grazie.
ogzd

47
questo mi ha aiutato a ottenere il nome del mese corrente. anche se ho usato ("MMMM") per ottenere il nome completo del mese invece di uno abbreviato.
speedynomads

77

Semplice come questo

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

4
L'uso dell'astrazione del calendario è la soluzione più elegante secondo me. +1
sebastian

2
Sbagliato! Il problema sarà nelle lingue con casi. Ad esempio, nelle versioni locali slave restituirà il mese in caso genitivo, ad esempio, per ottobre in lingua ru-RU riceverai октябряinvece di Октябрь, cosa che probabilmente ti aspetti.
Nick Sikrier

41

Questa è la soluzione che ho trovato per un progetto di classe:

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

Il numero che inserisci proviene da una Calendar.MONTHchiamata.


2
Questo è utile per menew SimpleDateFormat("MMMM").format(cal.getTime());
Pratik Butani

questa è una soluzione debole, che ne dici di gennaio, febbraio ecc. non oltre a gennaio, febbraio ecc. questo non coprirà tutta la situazione
Abeer zaroor

2
Bene, dovresti aggiungere 1 al mese. Gli array iniziano da 0.
RoccoDev

questo è brutto, stai reinventando java?
Mickey Perlstein

1
Funziona per gli utenti di lingua inglese. E gli altri?
Advait S

33

se si dispone di un'interfaccia multilingue, è possibile utilizzare getDisplayName per visualizzare il nome del mese con il controllo della lingua di visualizzazione.

ecco un esempio di visualizzazione del nome del mese in inglese, francese, arabo e arabo in un paese specifico come "Siria":

    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());

il risultato è:

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

Quale versione Java è questa?
Muhammad Gelbana

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

Per alcune lingue (ad esempio il russo) questo è l'unico modo corretto per ottenere i nomi dei mesi indipendenti.

Questo è ciò che ottieni, se usi getDisplayNameda Calendaro DateFormatSymbolsper gennaio:

января (che è corretto per una stringa di data completa: " 10 января, 2014 ")

ma nel caso di un nome di mese autonomo ti aspetteresti:

январь


È una risposta corretta per la lingua RU. Molto strano però, che Android SDK non contiene la specifica "LLLL".
Anfet

12

Joda-Time

Che ne dici di usare Joda-Time . È un'API data-ora di gran lunga migliore con cui lavorare (e Januaryqui significa gennaio. Non è come Calendar, che utilizza l' 0-basedindice per mesi).

È possibile utilizzare il AbstractDateTime#toString( pattern )metodo per formattare la data nel formato specificato:

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

Nome mese dal numero

Se desideri il nome del mese per un determinato numero di mese, puoi farlo in questo modo:

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

Localizzare

L'approccio precedente utilizza le impostazioni internazionali predefinite correnti della JVM per la lingua del nome del mese. Si desidera invece specificare un oggetto Locale.

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

1
grazie ma sono contento del mio vecchio SimpleDateFormateDate
ogzd

@ogzd. Il vostro desiderio. Ma dovresti sicuramente provarlo e scommetto che adorerai cantarlo.
Rohit Jain

@ogzd. Ho pubblicato il modo per ottenere il nome del mese dal numero del mese. BTW, perché vorresti farlo?
Rohit Jain

10

Month::getDisplayName

A partire da Java 8, usa Monthenum. Il getDisplayNamemetodo localizza automaticamente il nome del mese.

Passaggio:

  • A TextStyleper determinare quanto tempo o quanto abbreviato.
  • A Localeper specificare la lingua umana utilizzata nella traduzione e le norme culturali utilizzate per l'abbreviazione, la punteggiatura, ecc.

Esempio:

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

9

Potrebbe essere una vecchia domanda, ma come una riga per ottenere il nome del mese in cui conosciamo gli indici, ho usato

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

o per nomi brevi

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

Tieni presente che monthNumberinizi a contare da 1 mentre uno dei metodi sopra restituisce un array, quindi devi iniziare a contare da 0.


3

Questo codice supporta la lingua. Li avevo usati nell'app Android.

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

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

1
Funziona perfettamente, i commenti sono solo un po 'completamente sbagliati però
Иво Недев

3

L'ho trovato molto più semplice ( 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));
}

non Monthinizia il suo indice con gennaio = 1, mentre il calendario inizia con gennaio = 0? Non Month.of(calendar.get(Calendar.MONTH));fallirebbe nel caso di gennaio?
MCO

2

Puoi ottenere una riga come questa: String monthName = new DataFormatSymbols.getMonths()[cal.get(Calendar.MONTH)]


2

Questo funziona per me:

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

Per restituire "September"con una riga:

String month = getMonthName(9);

2

Senso unico:

Abbiamo MonthAPI in Java ( java.time.Month). Possiamo ottenere usandoMonth.of(month);

Qui, Monthsono indicizzati come numeri, quindi puoi fornire Month.JANUARYo fornire un indice nell'API sopra come 1, 2, 3, 4.

Secondo modo:

ZonedDateTime.now().getMonth();

Questo è disponibile in java.time.ZonedDateTime.


1

Ho creato un'estensione kotlin basata sulle risposte in questo argomento e utilizzando le risposte DateFormatSymbols ottieni una risposta localizzata.

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

Questo ha funzionato per me

        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
Sebbene la tua risposta possa essere corretta, è di cattiva qualità. Per favore, spiega perché questa risposta è corretta.
SubliemeSiem

1
@SubliemeSiem Sto solo cercando di cambiare formato e il modo più semplice per farlo: MM- restituirà il nome del mese in numeri interi come 01, 02, 03. MMM-restituirà il nome del mese in breve come jan, feb, mar. MMMM: restituirà il nome completo del mese in formato stringa come gennaio.
Amit Mishra

questa è l'unica risposta CORRETTA per la formattazione delle date. utilizzare un oggetto Data o Calendario e formattarlo con un formattatore. la domanda in sé è MALE
Mickey Perlstein

0

Restituisce il nome inglese del mese. 04 ritorna APRILE e così via.

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

Suggerimento semplice e diretto, grazie. Il tuo codice non si compila. Dovrai dichiarare il tipo di ritorno Montho applicarlo toStringal risultato prima di restituirlo.
Ole VV

-3

dal documento java 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>

Non riesco a vedere come questa risposta alla domanda posta.
jhpg
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.