Frage So erhalten Sie den Monatsnamen aus dem Kalender


Gibt es einen Oneliner, um den Namen des Monats zu erhalten, wenn wir es wissen? int monthNumber = calendar.get(Calendar.MONTH) ? Oder was ist der einfachste Weg?


74
2018-02-12 12:04


Ursprung


Antworten:


Du wirst diesen Weg auch bekommen.

  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;
    }

72
2018-02-12 12:09



Sie können es erreichen mit SimpleDateFormat, die Datum und Uhrzeit formatieren soll.

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

147
2018-02-12 12:05



So einfach ist das

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

56
2018-04-24 10:42



Das ist die Lösung, die ich mir für ein Klassenprojekt ausgedacht habe:

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

Die Zahl, die Sie eingeben, kommt von a Calendar.MONTH Anruf.


40
2017-10-31 01:14



Wenn Sie über eine mehrsprachige Benutzeroberfläche verfügen, können Sie mit getDisplayName den Namen des Monats mit der Steuerung der Anzeigesprache anzeigen.

Hier ist ein Beispiel für die Anzeige des Monatsnamens in Englisch, Französisch, Arabisch und Arabisch in einem bestimmten Land wie "Syrien":

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

Das Ergebnis ist:

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

30
2018-01-17 17:40



Joda-Zeit

Wie wäre es mit der Verwendung? Joda-Zeit. Es ist eine weitaus bessere Date-Time-API, mit der man arbeiten kann (Und January bedeutet Januar hier. Es ist nicht wie Kalender, der verwendet 0-based Index für Monate).

Sie können verwenden AbstractDateTime#toString( pattern ) Methode zum Formatieren des Datums im angegebenen Format:

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

Monatsname von Nummer

Wenn Sie den Monatsnamen für eine bestimmte Monatsnummer möchten, können Sie das folgendermaßen tun:

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

Lokalisieren

Der obige Ansatz verwendet das aktuelle Standardgebietsschema Ihrer JVM für die Sprache des Monatsnamens. Sie möchten stattdessen ein Gebietsschema-Objekt angeben.

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

10
2018-02-12 12:10



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

Für einige Sprachen (z. B. Russisch) ist dies die einzige Möglichkeit, die Namen der eigenständigen Monate zu erhalten.

Das bekommst du, wenn du es benutzt getDisplayName von dem Calendar oder DateFormatSymbols für Januar:

января (was für eine vollständige Datumszeichenkette korrekt ist: "10. Januar 2014")

aber im Fall eines eigenständigen Monatsnamens würden Sie erwarten:

январь


9
2017-08-15 15:42



Seit Java 8:

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

8
2018-04-17 12:37