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?
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?
Antworten:
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;
}
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()));
So einfach ist das
mCalendar = Calendar.getInstance();
String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
октябряstattdessen erhalten Октябрь, was Sie wahrscheinlich erwarten.
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.
new SimpleDateFormat("MMMM").format(cal.getTime());
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
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:
январь
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");
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");
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 );
SimpleDateFormatundDate
Month::getDisplayNameVerwenden Sie seit Java 8 die MonthAufzählung. Die getDisplayNameMethode lokalisiert automatisch den Namen des Monats.
Bestehen:
TextStyle, um zu bestimmen, wie lange oder wie abgekürzt.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()
);
}
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.
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,...
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));
}
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?
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.
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]
}
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());
DateFormat date = new SimpleDateFormat("dd/MMM/yyyy");
Date date1 = new Date();
System.out.println(date.format(date1));
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);
}
Monthoder toStringauf das Ergebnis anwenden , bevor Sie es zurückgeben.
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>