it-swarm.com.de

So erhalten Sie den Monatsnamen aus dem Kalender

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

81
ogzd

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

sie können dies mit SimpleDateFormat erreichen, das Datum und Uhrzeit formatiert. 

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

So einfach ist das

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

Dies ist die Lösung, die ich für ein Klassenprojekt entwickelt 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 übergebene Nummer stammt von einem Calendar.MONTH-Anruf.

40
Terry Chern

wenn Sie über eine mehrsprachige Benutzeroberfläche verfügen, können Sie getDisplayName verwenden, um den Monatsnamen anzuzeigen und die Anzeigesprache zu 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
32
Eng. Samer T
SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() );
dateFormat.format( date );

Für einige Sprachen (z. B. Russisch) ist dies der einzig richtige Weg, die Standalone-Monatsnamen abzurufen.

Dies erhalten Sie, wenn Sie getDisplayName aus der Calendar oder DateFormatSymbols fü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:

январь

12
artkoenig

Joda-Zeit

Wie wäre es mit Joda-Time . Es ist eine weitaus bessere Date-Time-API, mit der gearbeitet werden kann (und January steht hier für Januar. Es ist nicht wie Kalender, das 0-based-Index für Monate verwendet). 

Sie können die Methode AbstractDateTime#toString( pattern ) verwenden, um das Datum im angegebenen Format zu 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 die aktuelle Standard-Locale Ihrer JVM für die Sprache des Monatsnamens. Sie möchten stattdessen ein Locale-Objekt angeben.

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

Month::getDisplayName

Verwenden Sie seit Java 8 die Month enum. Die getDisplayName -Methode lokalisiert automatisch den Namen des Monats. 

Bestehen:

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

Beispiel:

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

Es könnte eine alte Frage sein, aber als One-Liner, um den Namen des Monats zu erfahren, an dem wir die Indizes kennen, habe ich verwendet

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

oder für kurze Namen

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

Bitte beachten Sie, dass Ihre monthNumber ab 1 zählt, während eine der oben genannten Methoden ein Array zurückgibt, sodass Sie ab 0 zählen müssen.

7
georger

Dieser Code hat Sprachunterstützung ... Ich hatte sie in der Android App verwendet.

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

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

Das funktioniert für mich:

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

Um "September" mit einer Zeile zurückzugeben:

String month = getMonthName(9);
2
jhpg

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

2
Whirvis

Einweg:

Wir haben Month API in Java (Java.time.Month). Wir können mit Month.of(month); bekommen

Hier werden Month als Zahlen indiziert, so dass Sie entweder Month.JANUARY angeben können oder einen Index in der obigen API wie 1, 2, 3, 4. 

Zweiter Weg:

ZonedDateTime.now().getMonth();

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

1
kushal baldev

Ich habe eine Kotlin-Erweiterung erstellt, die auf den Antworten in diesem Thema basiert. Wenn Sie die DateFormatSymbols-Antworten verwenden, 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]
}
0

Ich fand das viel einfacher ( https://docs.Oracle.com/javase/tutorial/datetime/iso/enum.html )

private void getCalendarMonth(Date date) {      
    Calendar 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));
}
0
JibinNajeeb
DateFormat date =  new SimpleDateFormat("dd/MMM/yyyy");
Date date1 = new Date();
System.out.println(date.format(date1));
0
Sanjeev Mishra

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);
    }
0
mxhc

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
mahadev gouda