Ich versuche, den Namen des Monats als Zeichenfolge zurückzugeben, z. B. "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?
java.util.Calendar
und keine andereCalendar
Klasse, oder?Formatter f = new Formatter();
(optional können Sie ihm ein Gebietsschema geben) dannString monthName = f.format("%tB",c).toString();
oder%tb
für Kurznamen.Benutze das :
Der Monatsname enthält den vollständigen Monatsnamen. Wenn Sie einen kurzen Monatsnamen wünschen, verwenden Sie diesen
quelle
Verwenden Sie den folgenden Code, um den Monat in der Zeichenfolgenvariablen abzurufen
Zum Beispiel den Monat September:
M -> 9
MM -> 09
MMM -> Sep.
MMMM -> September
quelle
"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 im Juni 2010 zur Android-Plattform hinzugefügt .
Auch wenn es auf Englisch keinen Unterschied zwischen der Codierung durch 'MMMM' und 'LLLL' gibt, sollten Sie auch an andere Sprachen denken.
ZB ist dies, was Sie erhalten, wenn Sie
Calendar.getDisplayName
das "MMMM" -Muster für Januar mit dem Russen verwendenLocale
:января (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:
Wenn Sie daran interessiert sind, woher alle Übersetzungen stammen, finden Sie hier den Verweis auf gregorianische Kalenderübersetzungen (andere Kalender sind oben auf der Seite verlinkt).
quelle
So einfach ist das
Calendar.LONG gibt den vollständigen Namen des Monats an und Calendar.SHORT gibt den Namen kurz an. Zum Beispiel: Calendar.LONG gibt Januar zurück. Calendar.SHORT gibt Jan zurück
quelle
Ich behalte diese Antwort, die für andere Fälle nützlich ist, aber die @ Wahrheitsantwort scheint der einfachste und direkteste Weg zu sein.
Sie können DateFormatSymbols verwenden
quelle
Die einzige Möglichkeit unter Android, einen richtig formatierten Stanalone-Monatsnamen für Sprachen wie Ukrainisch, Russisch und Tschechisch zu erhalten
Getestet auf API 15-25
Die Ausgabe für Mai ist йай, aber nicht Мая
quelle
Russisch.
Englisch in den Vereinigten Staaten.
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
undGregorianCalendar
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:
Month
und ihregetDisplayName
Methode.DateTimeFormatter
.Verwenden Sie Monat
Die Ausgabe dieses Snippets lautet:
In einigen Sprachen macht es einen Unterschied, ob Sie
TextStyle.FULL
oder verwendenTextStyle.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:Ich zeige die Verwendung von a
ZonedDateTime
, dem nächstgelegenen Ersatz für die alteCalendar
Klasse. Der obige Code wird für eine ArbeitLocalDate
, eineLocalDateTime
,MonthDay
,OffsetDateTime
und einYearMonth
zu.Was ist, wenn Sie eine
Calendar
von einer Legacy-API erhalten haben, die noch nicht auf java.time aktualisiert wurde? In a konvertierenZonedDateTime
und wie oben vorgehen: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 .
org.threeten.bp
Zeitklassen mit Unterpaketen importieren.Links
java.time
zuerst beschrieben wurde.java.time
Java 6 und 7 (ThreeTen für JSR-310).quelle
Ich würde empfehlen,
Calendar
Objekt zu verwenden undLocale
da Monatsnamen für verschiedene Sprachen unterschiedlich sind:Beispiel für den vollständigen Monatsnamen:
Ergebnis:
January
Beispiel für einen kurzen Monatsnamen:
Ergebnis:
Jan
quelle
Ein Beispiel für die Ermittlung von Datum und Uhrzeit in diesem Format "2018 Nov 01 16:18:22"
quelle
Es ist überraschend schwierig, einen eigenständigen Monatsnamen in Java "richtig" auszuführen. (Zumindest zum jetzigen Zeitpunkt. Ich verwende derzeit Java 8).
Das Problem ist, dass sich in einigen Sprachen, einschließlich Russisch und Tschechisch, die eigenständige Version des Monatsnamens von der "Formatierungs" -Version unterscheidet. Es scheint auch, dass keine einzelne Java-API nur die "beste" Zeichenfolge liefert. Die meisten hier veröffentlichten Antworten bieten bisher nur die Formatierungsversion. Im Folgenden wird eine funktionierende Lösung zum Abrufen der eigenständigen Version eines einzelnen Monatsnamens oder zum Abrufen eines Arrays mit allen Namen eingefügt.
Ich hoffe das spart jemand anderem etwas Zeit!
quelle