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.MONTH
Anruf.
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 getDisplayName
ab dem 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:
январь
Wie wäre es mit Joda-Time . Es ist eine weitaus bessere Datums- / Uhrzeit-API (und January
bedeutet 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 );
SimpleDateFormat
undDate
Month::getDisplayName
Verwenden Sie seit Java 8 die Month
Aufzählung. Die getDisplayName
Methode 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 monthNumber
Zä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));
}
Month
startet 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 Month
API in Java ( java.time.Month
). Wir können mit bekommenMonth.of(month);
Hier Month
werden die als Zahlen indiziert, sodass Sie entweder Month.JANUARY
einen 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);
}
Month
oder toString
auf 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>