Как получить формат даты для локали - PullRequest
5 голосов
/ 18 февраля 2011

Я использовал DateFormat для форматирования дат, но теперь мне нужно передать формат для локали в виджет даты jQuery. Как я могу получить формат?

Обновление

Чтобы уточнить, мне нужно получить шаблон в Java , чтобы я мог вывести его в другом месте. например в некотором JavaScript, где я мог бы захотеть создать такую ​​строку с форматом даты в ней:

$('#datepicker').datepicker({'dateFormat':'dd/mm/yy'})

Ответы [ 2 ]

4 голосов
/ 18 февраля 2011

Вы можете получить шаблон даты, используя

((SimpleDateFormat) DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, Locale.UK)).toPattern()

или если вам просто нужна дата

((SimpleDateFormat) DateFormat.getDateInstance(DateFormat.SHORT, Locale.UK)).toPattern()

API: SimpleDateFormat.toPattern () , DateFormat.getDateTimeInstance () , DateFormat.getDateInstance ()

Второй вопрос - как преобразовать это в шаблон формата, специфичный для jQuery.

форматирование даты Java . vs jQuery DatePicker Форматирование даты

  • день года в java D, в jQuery o
  • короткий год в Java yy, в jQuery y
  • длинный год на Java гггг, в jQuery гг
  • Месяц без ведущих нулей в Java M, в jQuery m
  • Месяц с ведущими нулями в Java MM, в jQuery мм
  • Короткое название месяца в Java MMM, в jQuery M
  • Длинна названия месяца в Java MMMM в jQuery MM -
1 голос
/ 20 апреля 2011

Я недавно смотрел на это и не нашел простого способа выяснить это с помощью стандартной библиотеки.Мне требуется это для локализации класса 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

Если кто-то может улучшить это, я хотел бы увидеть их решение.

...