Russisch.
Month
.MAY
.getDisplayName(
TextStyle.FULL_STANDALONE ,
new Locale( "ru" , "RU" )
)
май
Englisch in den Vereinigten Staaten.
Month
.MAY
.getDisplayName(
TextStyle.FULL_STANDALONE ,
Locale.US
)
Kann
Sehen Sie diesen Code live auf IdeOne.com .
ThreeTenABP und java.time
Hier ist die moderne Antwort. Als diese Frage im Jahr 2011 gestellt wurde Calendar
und GregorianCalendar
häufig für Daten und Zeiten verwendet wurde, obwohl sie immer schlecht gestaltet waren. Das ist jetzt 8 Jahre her und diese Klassen sind längst veraltet. Angenommen, Sie befinden sich noch nicht auf API-Ebene 26, dann ist mein Vorschlag, die ThreeTenABP-Bibliothek zu verwenden, die einen an Android angepassten Backport von java.time enthält, der modernen Java-API für Datum und Uhrzeit. java.time ist so viel schöner zu arbeiten.
Abhängig von Ihren genauen Bedürfnissen und Ihrer Situation gibt es zwei Möglichkeiten:
- Verwendung
Month
und ihre getDisplayName
Methode.
- Verwenden Sie a
DateTimeFormatter
.
Verwenden Sie Monat
Locale desiredLanguage = Locale.ENGLISH;
Month m = Month.MAY;
String monthName = m.getDisplayName(TextStyle.FULL, desiredLanguage);
System.out.println(monthName);
Die Ausgabe dieses Snippets lautet:
Kann
In einigen Sprachen macht es einen Unterschied, ob Sie TextStyle.FULL
oder verwenden TextStyle.FULL_STANDALONE
. Sie müssen sehen, vielleicht mit Ihren Benutzern abklären, welcher der beiden in Ihren Kontext passt.
Verwenden Sie einen DateTimeFormatter
Wenn Sie ein Date mit oder ohne Tageszeit haben, finde ich ein DateTimeFormatter
praktischeres. Beispielsweise:
DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("MMMM", desiredLanguage);
ZonedDateTime dateTime = ZonedDateTime.of(2019, 5, 31, 23, 49, 51, 0, ZoneId.of("America/Araguaina"));
String monthName = dateTime.format(monthFormatter);
Ich zeige die Verwendung von a ZonedDateTime
, dem nächstgelegenen Ersatz für die alte Calendar
Klasse. Der obige Code wird für eine Arbeit LocalDate
, eine LocalDateTime
, MonthDay
, OffsetDateTime
und ein YearMonth
zu.
Was ist, wenn Sie eine Calendar
von einer Legacy-API erhalten haben, die noch nicht auf java.time aktualisiert wurde? In a konvertieren ZonedDateTime
und wie oben vorgehen:
Calendar c = getCalendarFromLegacyApi();
ZonedDateTime dateTime = DateTimeUtils.toZonedDateTime(c);
Der Rest ist der gleiche wie zuvor.
Frage: Benötigt java.time nicht Android API Level 26?
java.time funktioniert sowohl auf älteren als auch auf neueren Android-Geräten. Es erfordert nur mindestens Java 6 .
- In Java 8 und höher und auf neueren Android-Geräten (ab API-Level 26) ist die moderne API integriert.
- In Nicht-Android Java 6 und 7 erhalten Sie den ThreeTen Backport, den Backport der modernen Klassen (ThreeTen für JSR 310; siehe die Links unten).
- Verwenden Sie auf (älteren) Android die Android-Edition von ThreeTen Backport. Es heißt ThreeTenABP. Und stellen Sie sicher, dass Sie die Datums- und
org.threeten.bp
Zeitklassen mit Unterpaketen importieren.
Links