Я недавно смотрел на это и не нашел простого способа выяснить это с помощью стандартной библиотеки.Мне требуется это для локализации класса Wicket org.apache.wicket.extensions.markup.html.form.DateTextField
, который принимает шаблон SimpleDateFormat, а не объект DateFormat.Вот код, который я наконец решил использовать, он не зависит от деталей реализации JVM, но должен проанализировать выходные данные DateFormat.format на определенную дату (22.113333 - в формате США).
public static String simpleDateFormatForLocale(Locale locale) {
TimeZone commonTimeZone = TimeZone.getTimeZone("UTC");
Calendar c = Calendar.getInstance(commonTimeZone);
c.set(3333, Calendar.NOVEMBER, 22);
DateFormat localeDateFormat = DateFormat.getDateInstance(DateFormat.SHORT, locale);
localeDateFormat.setTimeZone(commonTimeZone);
String dateText = localeDateFormat.format(c.getTime());
return dateText.replace("11", "MM").replace("22", "dd").replace("3333", "yyyy").replace("33", "yyyy");
}
В моем случае я хочу принудительно использовать yyyy
, даже если формат возвращает год из двух цифр.Вот почему я дважды звоню replace
за год.
Вот вывод для некоторых образцов локалей:
en_US 11/22/33 MM/dd/yyyy
en_CA 22/11/33 dd/MM/yyyy
zh_CN 33-11-22 yyyy-MM-dd
de 22.11.33 dd.MM.yyyy
ja_JP 33/11/22 yyyy/MM/dd
Если кто-то может улучшить это, я хотел бы увидеть их решение.