it-swarm.com.de

Monatsname als String

Ich versuche, den Namen des Monats als String zurückzugeben, beispielsweise "Mai", "September", "November".

Ich habe es versucht:

int month = c.get(Calendar.MONTH);

Dies gibt jedoch ganze Zahlen zurück (5, 9 bzw. 11). Wie kann ich den Monatsnamen erhalten?

70
Gaby

Verwenden Sie getDisplayName .

Für frühere APIs verwenden Sie String.format(Locale.US,"%tB",c);

82
trutheality

Benutze das :

Calendar cal=Calendar.getInstance();
SimpleDateFormat month_date = new SimpleDateFormat("MMMM");
String month_name = month_date.format(cal.getTime());

Der Monatsname enthält den vollständigen Monatsnamen. Wenn Sie den Kurzmonatsnamen verwenden möchten, verwenden Sie .__

 SimpleDateFormat month_date = new SimpleDateFormat("MMM");
 String month_name = month_date.format(cal.getTime());
140
John

Um einen Monat in Stringvariablen zu erhalten, verwenden Sie den folgenden Code

Zum Beispiel der Monat September:

M -> 9

MM -> 09

MMM -> Sep

MMMM -> September 

String monthname=(String)Android.text.format.DateFormat.format("MMMM", new Date())
87
Arun Antoney

"MMMM" ist definitiv NICHT die richtige Lösung (auch wenn es für viele Sprachen funktioniert), verwenden Sie das "LLLL" -Muster mit SimpleDateFormat

Die Unterstützung für 'L' als ICU-kompatible Erweiterung für eigenständige Monatsnamen wurde am Jun. 2010 der Android-Plattform hinzugefügt.

Auch wenn in Englisch zwischen der Kodierung durch 'MMMM' und 'LLLL' kein Unterschied besteht, sollten Sie auch über andere Sprachen nachdenken. 

Z.B. Das bekommen Sie, wenn Sie Calendar.getDisplayName oder das "MMMM" -Muster für Januar mit der russischen Locale verwenden:

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

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

январь

Die richtige Lösung ist:

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

Wenn Sie daran interessiert sind, woher alle Übersetzungen kommen - hier ist die Referenz zu gregorianischen Kalenderübersetzungen (andere Kalender sind oben auf der Seite verlinkt).

34
artkoenig

So einfach ist das

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

Ich halte diese Antwort, die für andere Fälle nützlich ist, aber die @ wahrheitsgetreue Antwort scheint der einfachste und direkteste Weg zu sein.

Sie können DateFormatSymbols verwenden

DateFormatSymbols(Locale.FRENCH).getMonths()[month]; // FRENCH as an example
9
MByD

Der einzige Weg, um auf Android einen richtig formatierten Stanalon-Monatsnamen für ukrainische, russische, tschechische Sprachen zu erhalten

private String getMonthName(Calendar calendar, boolean short) {
    int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_MONTH_DAY | DateUtils.FORMAT_NO_YEAR;
    if (short) {
        flags |= DateUtils.FORMAT_ABBREV_MONTH;
    }
    return DateUtils.formatDateTime(getContext(), calendar.getTimeInMillis(), flags);
}

Getestet mit API 15-25

Ausgabe für Mai ist Май aber nicht Мая

3
Dmytro

Ich würde empfehlen, Calendar object und Locale zu verwenden, da die Monatsnamen für verschiedene Sprachen unterschiedlich sind:

// index can be 0 - 11
private String getMonthName(final int index, final Locale locale, final boolean shortName)
{
    String format = "%tB";

    if (shortName)
        format = "%tb";

    Calendar calendar = Calendar.getInstance(locale);
    calendar.set(Calendar.MONTH, index);
    calendar.set(Calendar.DAY_OF_MONTH, 1);

    return String.format(locale, format, calendar);
}

Beispiel für vollen Monatsnamen:

System.out.println(getMonthName(0, Locale.US, false));

Ergebnis: January

Beispiel für den Kurzmonatsnamen:

System.out.println(getMonthName(0, Locale.US, true));

Ergebnis: Jan

2
Sa Qada

Es ist überraschend schwierig, einen unabhängigen Monatnamen in Java zu erhalten. (Zumindest zum Zeitpunkt des Schreibens. Ich verwende derzeit Java 8). 

Das Problem ist, dass in einigen Sprachen, einschließlich Russisch und Tschechisch, die Standalone-Version des Monatsnamens sich von der "Formatierungs" -Version unterscheidet. Es scheint auch, dass keine einzige Java-API Ihnen nur die "beste" Zeichenfolge gibt. Die Mehrzahl der bisher veröffentlichten Antworten bietet nur die Formatierungsversion. Nachfolgend finden Sie eine funktionierende Lösung, um die Standalone-Version eines einzelnen Monatsnamens zu erhalten oder ein Array mit allen zu erhalten.

Ich hoffe, das erspart jemandem etwas Zeit!

/**
 * getStandaloneMonthName, This returns a standalone month name for the specified month, in the
 * specified locale. In some languages, including Russian and Czech, the standalone version of
 * the month name is different from the version of the month name you would use as part of a
 * full date. (Different from the formatting version).
 *
 * This tries to get the standalone version first. If no mapping is found for a standalone
 * version (Presumably because the supplied language has no standalone version), then this will
 * return the formatting version of the month name.
 */
private static String getStandaloneMonthName(Month month, Locale locale, boolean capitalize) {
    // Attempt to get the standalone version of the month name.
    String monthName = month.getDisplayName(TextStyle.FULL_STANDALONE, locale);
    String monthNumber = "" + month.getValue();
    // If no mapping was found, then get the formatting version of the month name.
    if (monthName.equals(monthNumber)) {
        DateFormatSymbols dateSymbols = DateFormatSymbols.getInstance(locale);
        monthName = dateSymbols.getMonths()[month.getValue()];
    }
    // If needed, capitalize the month name.
    if ((capitalize) && (monthName != null) && (monthName.length() > 0)) {
        monthName = monthName.substring(0, 1).toUpperCase(locale) + monthName.substring(1);
    }
    return monthName;
}

/**
 * getStandaloneMonthNames, This returns an array with the standalone version of the full month
 * names.
 */
private static String[] getStandaloneMonthNames(Locale locale, boolean capitalize) {
    Month[] monthEnums = Month.values();
    ArrayList<String> monthNamesArrayList = new ArrayList<>();
    for (Month monthEnum : monthEnums) {
        monthNamesArrayList.add(getStandaloneMonthName(monthEnum, locale, capitalize));
    }
    // Convert the arraylist to a string array, and return the array.
    String[] monthNames = monthNamesArrayList.toArray(new String[]{});
    return monthNames;
}
0
BlakeTNC

Eine Beispielmethode, um Datum und Uhrzeit in Diesem Format "2018 1. November 16:18:22" abzurufen, verwenden Sie diese Option

DateFormat dateFormat = new SimpleDateFormat("yyyy MMM dd HH:mm:ss");
        Date date = new Date();
         dateFormat.format(date);
0
justchill