Potrzebuję wyodrębnić tylko informacje o miesiącu i roku z Data Java, aby wyświetlić w GUI. Ta data musi być przetłumaczona przy użyciu lokalizacji użytkownika. znam 2 sposoby formatowania zlokalizowanych terminach:Jak wyodrębnić pola dat dla formatowania specyficznego dla ustawień regionalnych w Javie?
- Korzystanie
DateFormat.getInstance(DateFormat.LONG, locale).format(date)
- Korzystanie
new SimpleDateFormat("yyyy M", locale).format(date)
Dla lokalizacji SIMPLIFIED_CHINESE
i daty 2013-02-18
, to daje:
- 2013 年 2 月 18日
Musimy użyć formatu LONG
bez dnia (2013 年 2 月). [Wariant 2 jest oczywiście nie do zaakceptowania, ponieważ ustawienie regionalne nie ma wpływu na lokalizację). Problem może być następujący: jak usunąć część dnia (18 日) z długiego formatu? Próbowałem użyć metody format(Date date, StringBuffer toAppendTo, FieldPosition pos)
, ale pozwala to tylko na wyodrębnienie części numeru, a nie dodatkowego znaku.
Wzór DateFormat.getInstance(DateFormat.LONG, Locale.SIMPLIFIED_CHINESE)
to yyyy'年'M'月'd'日'
. Wyodrębnienie części dnia dałoby yyyy'年'M'月'
. Wydaje mi się, że nie można używać standardu Java DataFormat, aby to osiągnąć, ponieważ dodatkowe znaki (年
, 月
i 日
) nie są mapowane do odpowiedniego pola, ale są po prostu znakami bez innych znaczników semantycznych dla formatera.
Spojrzałem na DateFormatSymbols
i LocaleServiceProvider
, ale myślę, że to nie pomaga. Dla mnie punktem rozszerzenia byłoby dodanie innego stylu daty do metody getInstance(int style)
. Ale nie wydaje się to możliwe bez implementacji dla wszystkich ustawień regionalnych ...
Czy ta analiza jest prawidłowa? Jak osiągnąć to formatowanie w czysty sposób?
+1: Nie widzę sposobu, aby to zrobić. Może spróbuj zamiast tego biblioteki JodaTime. –
Próbowałem bez powodzenia następujących rzeczy: 'YearMonth.fromCalendarFields (cal) .toString (DateTimeFormat.longDate(). WithLocale (locale))'. – Jidehem