Exploit CLDR
Я понимаю, что вы используете Java 8, и на моем Java 8 я могу воспроизвести ваши результаты. Чтобы избежать недружественного пользователю сокращения CEST
(и аналогичного для других часовых поясов), я предлагаю вам использовать CLDR, Unicode Common Locale Data Repository.
Либо запустите вашу программу Java с этим аргументом JVM: -Djava.locale.providers=CLDR
.
Или установите системное свойство из вашей программы:
System.setProperty("java.locale.providers", "CLDR");
Это изменит ваш вывод. Теперь при использовании французской локали вывод будет:
lundi 25 mai 2020 21:06:07 heure avancée d'Europe centrale
И на английском sh:
Понедельник, 25 мая 2020 г., 21:09:39 Летнее время по Центральной Европе
Как это работает? Java получает данные о своей локали, включая форматы даты и времени, используемые в разных регионах, из максимум четырех источников. В версиях до Java 8 включительно по умолчанию используются собственные локальные данные Java; но значение по умолчанию изменяется с помощью упомянутого системного свойства. В Java 9 и более поздних версиях по умолчанию используется CLDR ( JEP 252 ). Таким образом, внесение этого изменения для использования CLDR в Java 8 также подготовит вас к переходу на Java 9 или новее.
Чтобы полностью исключить часовой пояс
Я хочу удалите часовой пояс, поскольку пользователь уже знает, что он [в часах] - это страна.
Попутное примечание: в некоторых случаях пользователям нравится быть уверенным, что они получают время самостоятельно часовой пояс. Это также поможет устранить неоднозначность в случае, если вам нужно напечатать время в перекрытии падения, когда часы повернуты назад. heure avancée d’Europe centrale
будет напечатано перед изменением часов, а heure normale de l’Europe centrale
после него.
Конечно, вы лучше знаете, что ваши пользователи хотят и в чем нуждаются. Итак, есть несколько вариантов:
- Вручную удалить часовой пояс из шаблона формата, как показано в ответе от munge.
Используйте FormatStyle.MEDIUM
. Это уже было предложено в теперь удаленном ответе Дэдпула. Вы можете использовать разные стили формата для даты и времени:
DateTimeFormatter formatter = DateTimeFormatter
.ofLocalizedDateTime(FormatStyle.FULL, FormatStyle.MEDIUM)
.withLocale(locale)
.withZone(zone);
System.out.println(formatter.format(Instant.now()));
Пример вывода на французском языке на Java 8:
mardi 26 мая 2020 19:26:59
И на английском sh locale:
Вторник, 26 мая 2020 г., 19:27:26