Ich muss nur die Monats- und Jahresinformationen aus einem Java-Datum extrahieren, um sie in einer GUI anzuzeigen. Dieses Datum muss mit dem Benutzergebietsschema übersetzt werden. Ich weiß, 2 Möglichkeiten für die lokalen Termine Formatierung:Wie extrahieren Sie die Datumsfelder für die länderspezifische Formatierung in Java?
- Mit
DateFormat.getInstance(DateFormat.LONG, locale).format(date)
- Mit
new SimpleDateFormat("yyyy M", locale).format(date)
Für locale SIMPLIFIED_CHINESE
und Datum 2013-02-18
, ergibt dies:
- 2013 年 2 月 18日
Wir müssen das Format LONG
ohne Tag verwenden (2013 年 2 月). [Die Variante 2 ist eindeutig nicht akzeptabel, da die Reihenfolge von Jahr-Monat nicht vom Gebietsschema betroffen ist]. Das Problem könnte sein: Wie entferne ich den Tagesabschnitt (18 日) vom langen Format? Ich habe versucht, mit der Methode format(Date date, StringBuffer toAppendTo, FieldPosition pos)
, aber dies ermöglicht nur das Extrahieren der Zahl Teil, nicht das extra Zeichen.
Das Muster der DateFormat.getInstance(DateFormat.LONG, Locale.SIMPLIFIED_CHINESE)
ist yyyy'年'M'月'd'日'
. Das Extrahieren des Tagesabschnitts würde yyyy'年'M'月'
ergeben. Es scheint mir, dass dies nicht mit dem DateFormat-Standard von Java möglich ist, da die zusätzlichen Zeichen (年
, 月
und 日
) nicht dem entsprechenden Feld zugeordnet sind, sondern einfach Zeichen ohne andere Semantik für den Formatierer sind.
Ich hatte einen Blick auf DateFormatSymbols
und LocaleServiceProvider
, aber denke, es hilft nicht. Für mich wäre der Erweiterungspunkt ein weiterer Datums-Style zur getInstance(int style)
Methode hinzuzufügen. Aber es scheint nicht möglich, ohne es für alle Locale zu implementieren ...
Ist diese Analyse korrekt? Wie erreicht man diese Formatierung auf eine saubere Art und Weise?
+1: Ich kann auch keinen Weg sehen, dies zu tun. Vielleicht versuchen Sie stattdessen die JodaTime-Bibliothek. –
Ich habe folgendes ohne Erfolg versucht: 'YearMonth.fromCalendarFields (cal) .toString (DateTimeFormat.longDate(). WithLocale (locale))'. – Jidehem