java DateFormat - получить шаблон даты по умолчанию для Индии как DD-MM-YY - PullRequest
0 голосов
/ 11 июля 2019

Преобладающая дата для Индии - DD-MM-YY.Я пытаюсь получить шаблон даты по умолчанию для Индии, используя следующий код.

Locale locale = new Locale("en", "IN");
java.text.DateFormat dateFormat = java.text.DateFormat.getDateInstance(
                            java.text.DateFormat.MEDIUM, locale);
String pattern = ((SimpleDateFormat)dateFormat).toPattern();

Переменная шаблона выше имеет значение "d MMM, yyyy".Но я хотел бы получить шаблон даты как "DD-MM-YY".Как этого добиться?

Ответы [ 4 ]

2 голосов
/ 11 июля 2019

Позолоченным решением вашей проблемы будет предоставление ваших собственных данных локали для en-IN локали.С одной стороны, это может быть слишком много, и вы можете искать следующие лучшие решения;с другой стороны, это выполнимо, если важно.Я не видел предоставленных данных в формате даты, поэтому не буду притворяться, что могу сообщить вам подробности.Пожалуйста, изучите документацию LocaleServiceProvider и ее подкласса DateFormatProvider (ссылки внизу).

Получение строки шаблона локализованного формата для локали

    Locale loc = Locale.forLanguageTag("en-IN");
    System.out.println(DateTimeFormatterBuilder.getLocalizedDateTimePattern(
            FormatStyle.SHORT, null, IsoChronology.INSTANCE, loc));

Вывод на мой Java9:

дд / мм / гг

Обратите внимание, что я использую FormatStyle.SHORT, а не MEDIUM.В любом случае, я считаю, что это первая часть решения вашей проблемы.

Возможные следующие лучшие решения

Вывод выше не так уж прост, просто используя косые черты там, где вы хотели тире/ дефис.Вы можете подумать, могут ли ваши пользователи жить с этим.Результат в других версиях Java может отличаться.

Запуск вашей программы Java с системным свойством java.locale.providers, начинающимся с HOST, заставит Java использовать формат даты операционной системы для языка по умолчаниютолько .Во-первых, вы можете проверить, дает ли это то, что вы хотите.Во-вторых, и, что еще важнее, это позволяет пользователю выбирать собственный формат даты, настраивая свою операционную систему.Например,

java -Djava.locale.providers=HOST,CLDR,COMPAT YourApp

Подробнее в документации LocaleServiceProvider.

На той же Java 9, что и раньше, вывод, который я получаю для te-IN (телуга), это dd-MM-yy, который вы просили.Во многих ситуациях пользователь выбирает локаль, находящуюся вне контроля, но также могут быть ситуации, когда выбор этой локали решит вашу проблему.

Наконец, если вам нужно поддерживать свое приложение в нескольких локалях, а вы - иличто важно, ваши пользователи - не удовлетворены только форматом даты для en-IN локали, вы, конечно, можете вручную кодировать исключение только для этой локали и жестко кодировать dd-MM-yy всякий раз, когда вы получаете эту локаль.Это не красивое решение, но будет работать.

Ссылки

1 голос
/ 11 июля 2019

Используйте это,

java.text.DateFormat dateFormat = new SimpleDateFormat("dd-MM-yy");
String pattern = dateFormat.toPattern();

Здесь вам нужно установить точный формат даты, который вы хотите. На данный момент в вашем коде присваивается формат по умолчанию java.text.DateFormat.MEDIUM, который d MMM, yyyy

0 голосов
/ 11 июля 2019

Остальные ответы обязательно сработают.Но DateFormat/SimpleDateFormat не поточно-ориентированный (см. Раздел синхронизации).

Рекомендуется использовать DateTimeFormatter вместо:

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM-yy");
    System.out.println("Formatted date: " + dateTimeFormatter.format(ZonedDateTime.now()));
0 голосов
/ 11 июля 2019

Помимо жесткого кода "dd-MM-yy" вы можете использовать формат SHORT вместо MEDIUM:

java.text.DateFormat dateFormat = java.text.DateFormat.getDateInstance(
                        java.text.DateFormat.SHORT, locale);

Новые классы времени данных работают аналогично и их стоит переключить на.

...