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?
Verwenden Sie getDisplayName .
Für frühere APIs verwenden Sie String.format(Locale.US,"%tB",c);
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());
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())
"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).
So einfach ist das
mCalendar = Calendar.getInstance();
String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
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
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 Мая
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
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;
}
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);