So erhalten Sie den Monatsnamen aus dem Kalender


Antworten:


99

Sie werden auch diesen Weg 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;
    }

6
Die Implementierung von DateFormatSymbols wurde in JDK 8 geändert, sodass die Methode getMonths nicht mehr für alle Gebietsschemas die richtigen Werte zurückgibt
ahaaman

1
Können Sie eine Problemumgehung / Arbeitslösung für JDK8 angeben?
Dominik

Wann würden Sie einen Monat als Nummer bekommen?
Mickey Perlstein

Mickey, um Ihre Frage zu beantworten, hier ist, wie Sie Monat als int erhalten und verwenden - public static void main (String [] args) {int month; GregorianCalendar date = new GregorianCalendar (); month = date.get (Calendar.MONTH); System.out.println ("Aktueller Monat ist" + (Monat + 1) + "und Monatsname ist" + getMonthForInt (Monat)); } static String getMonthForInt (int num) {String month = "false"; DateFormatSymbols dfs = new DateFormatSymbols (); String [] month = dfs.getMonths (); if (num> = 0 && num <= 11) {month = month [num]; } return month; }
Ajay Kumar

192

Sie können dies mit SimpleDateFormat erreichen , mit dem Datum und Uhrzeit formatiert werden sollen.

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

Dies wird funktionieren, aber ich möchte den String repr bekommen. des Monats, in dem ich den Index kenne. Ich denke, ich werde die anderen Ansätze verwenden, danke.
ogzd

47
Dies half mir, den aktuellen Monatsnamen zu erhalten. obwohl ich ("MMMM") verwendet habe, um den vollständigen Monatsnamen anstelle eines verkürzten zu erhalten.
Speedynomads

77

So einfach ist das

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

4
Die Verwendung der Kalenderabstraktion ist meiner Meinung nach die eleganteste Lösung. +1
Sebastian

2
Falsch! Das Problem wird in Sprachen mit Fällen sein. In slawischen Gebietsschemas wird beispielsweise im Genitiv ein Monat zurückgegeben, z. B. für den Oktober in einem ru-RU-Gebietsschema , das Sie октябряstattdessen erhalten Октябрь, was Sie wahrscheinlich erwarten.
Nick Sikrier

41

Dies ist die Lösung, die ich für ein Klassenprojekt gefunden 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 Nummer, die Sie übergeben, stammt aus einem Calendar.MONTHAnruf.


2
Dies ist nützlich für michnew SimpleDateFormat("MMMM").format(cal.getTime());
Pratik Butani

Dies ist eine schwache Lösung, wie wäre es mit Jan, Februar usw. nicht zusätzlich zu Januar Februar usw. Dies wird nicht die gesamte Situation
abdecken

2
Nun, Sie sollten 1 zum Monat hinzufügen. Arrays beginnen von 0.
RoccoDev

das ist schlecht, du erfindest java neu?
Mickey Perlstein

1
Dies funktioniert für englischsprachige Benutzer. Was ist mit den anderen?
Advait S

32

Wenn Sie über eine mehrsprachige Benutzeroberfläche verfügen, können Sie mit getDisplayName den Namen des Monats anzeigen und die Anzeige der Sprache steuern.

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

Welche Java-Version ist das?
Muhammad Gelbana

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

Für einige Sprachen (z. B. Russisch) ist dies der einzig richtige Weg, um die eigenständigen Monatsnamen zu erhalten.

Folgendes erhalten Sie, wenn Sie getDisplayNameab dem Calendaroder DateFormatSymbolsfür Januar verwenden:

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

Im Falle eines eigenständigen Monatsnamens würden Sie jedoch Folgendes erwarten:

январь


Ist eine korrekte Antwort für das Gebietsschema von RU. Sehr seltsam, dass das Android SDK keine 'LLLL'-Spezifikation enthält.
Anfet

12

Joda-Zeit

Wie wäre es mit Joda-Time . Es ist eine weitaus bessere Datums- / Uhrzeit-API (und Januarybedeutet hier Januar. Es ist nicht wie Kalender, der verwendet0-based Index monatelang verwendet wird).

Mit der AbstractDateTime#toString( pattern )Methode können Sie das Datum im angegebenen Format formatieren:

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

Monatsname von Nummer

Wenn Sie einen Monatsnamen für eine bestimmte Monatsnummer wünschen, können Sie dies 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 Gebietsschemaobjekt angeben.

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

1
danke aber ich bin glücklich mit meinem alten SimpleDateFormatundDate
ogzd

@ogzd. Ihr Wunsch. Aber Sie sollten es unbedingt versuchen, und ich wette, Sie werden es lieben, es zu singen.
Rohit Jain

@ogzd. Ich habe den Weg gepostet, um den Monatsnamen von der Monatsnummer zu erhalten. Übrigens, warum sollten Sie das tun wollen?
Rohit Jain

10

Month::getDisplayName

Verwenden Sie seit Java 8 die MonthAufzählung. Die getDisplayNameMethode lokalisiert automatisch den Namen des Monats.

Bestehen:

  • A TextStyle, um zu bestimmen, wie lange oder wie abgekürzt.
  • A Locale, um die in der Übersetzung verwendete menschliche Sprache und die für Abkürzung, Interpunktion usw. verwendeten kulturellen Normen anzugeben.

Beispiel:

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

9

Es mag eine alte Frage sein, aber als Einzeiler, um den Namen des Monats zu erhalten, in dem wir die Indizes kennen, habe ich verwendet

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

oder für Kurznamen

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

Bitte beachten Sie, dass Ihre monthNumberZählung ab 1 beginnt, während eine der oben genannten Methoden ein Array zurückgibt, sodass Sie mit der Zählung ab 0 beginnen müssen.


3

Dieser Code unterstützt die Sprache. Ich hatte sie in der Android App verwendet.

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

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

1
Dies funktioniert perfekt, die Kommentare sind nur ein kleines bisschen völlig falsch
Иво Недев

3

Ich fand das viel einfacher ( 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));
}

nicht Monthstartet seinen Index mit Januar = 1, während Kalender beginnt mit Januar = 0? Würde Month.of(calendar.get(Calendar.MONTH));im Januar nicht scheitern?
MCO

2

Sie können es eine Zeile wie folgt bekommen: String monthName = new DataFormatSymbols.getMonths()[cal.get(Calendar.MONTH)]


2

Das funktioniert bei mir:

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

So kehren Sie "September"mit einer Zeile zurück:

String month = getMonthName(9);

2

Einweg:

Wir haben MonthAPI in Java ( java.time.Month). Wir können mit bekommenMonth.of(month);

Hier Monthwerden die als Zahlen indiziert, sodass Sie entweder Month.JANUARYeinen Index in der obigen API wie 1, 2, 3, 4 oder einen Index in dieser bereitstellen können.

Zweiter Weg:

ZonedDateTime.now().getMonth();

Dies ist verfügbar in java.time.ZonedDateTime.


1

Ich habe eine Kotlin-Erweiterung basierend auf den Antworten in diesem Thema erstellt. Mit den DateFormatSymbols-Antworten erhalten Sie eine lokalisierte Antwort.

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

Das hat bei mir funktioniert

        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
Ihre Antwort mag zwar richtig sein, ist aber von schlechter Qualität. Bitte erläutern Sie, warum diese Antwort richtig ist.
SubliemeSiem

1
@SubliemeSiem Ich versuche nur, das Format und den einfachsten Weg zu ändern: MM - es wird den Monatsnamen in einer Ganzzahl wie 01, 02, 03 zurückgeben. MMM - es wird kurz den Monatsnamen wie jan, feb, mar zurückgeben. MMMM-it gibt den vollständigen Monatsnamen im Zeichenfolgenformat wie Januar zurück.
Amit Mishra

Dies ist die einzige RICHTIGE Antwort für die Formatierung von Daten. Verwenden Sie ein Datums- oder Kalenderobjekt und formatieren Sie es mit einem Formatierer. Die Frage selbst ist schlecht
Mickey Perlstein

0

Es gibt den englischen Namen des Monats zurück. 04 gibt APRIL zurück und so weiter.

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

Einfacher und direkter Vorschlag, danke. Ihr Code wird nicht kompiliert. Sie müssen entweder den Rückgabetyp deklarieren Monthoder toStringauf das Ergebnis anwenden , bevor Sie es zurückgeben.
Ole VV

-3

aus dem Java-Dokument 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>

Ich kann nicht sehen, wie diese die gestellte Frage beantwortet.
JHPG
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.