Не удалось перевести Date на испанский язык с помощью Locale ( "es_ES" )
Я пытаюсь сделать простой формат даты, он отлично работает, это очень просто, но проблема заключается в языке. Я использовал локаль "es_ES", чтобы получить "Miércoles" вместо "Среда" и вроде как, но я потерпел неудачу.
Здесь мой код:
SimpleDateFormat formato =
new SimpleDateFormat("EEEE d 'de' MMMM 'de' yyyy", new Locale("es_ES"));
String fecha = formato.format(new Date());
ОЖИДАННОЕ значение строки fecha
:
Miércoles 4 de Abril de 2012
но я все еще получаю:
Среда, 4 апреля 2012 года
Что я делаю неправильно?
Ответы
Ответ 1
"es_ES" - это язык + страна. Вы должны указать каждую часть отдельно.
Конструкторы для Locale
:
Вы хотите, чтобы new Locale("es", "ES");
получил локаль, которая идет с es_ES.
Ответ 2
Java 8
LocalDate today = LocalDate.now();
String day = today.getDayOfWeek().getDisplayName(TextStyle.FULL, new Locale("es","ES")));
Также работает в течение месяца.
Ответ 3
TL;DR
String output =
ZonedDateTime.now ( ZoneId.of ( "Europe/Madrid" ) )
.format (
DateTimeFormatter.ofLocalizedDate ( FormatStyle.FULL )
.withLocale ( new Locale ( "es" , "ES" ) )
)
;
martes 12 de julio de 2016
Подробнее
принятый ответ от Affe правильный. Вы неправильно создали объект Locale
.
java.time
В вопросе и ответе используются старые устаревшие классы, теперь вытесненные java.time framework, встроенные в Java 8 и более поздние версии. Эти классы вытесняют старые неприятные классы времени, такие как java.util.Date
. См. Учебник Oracle. Большая часть функциональных возможностей java.time портирована на Java 6 и 7 в ThreeTen-Backport и далее адаптирована для Android в ThreeTenABP.
Эти классы включают DateTimeFormatter
для управления форматом текста при создании строки со своего значения даты и времени. Вы можете указать явный шаблон форматирования. Но зачем беспокоиться? Пусть класс автоматически локализует формат для человеческого языка и культурных норм определенного Locale
.
Например, получите текущий момент региональный часовой пояс в Мадриде.
ZoneId zoneId = ZoneId.of( "Europe/Madrid" );
ZonedDateTime zdt = ZonedDateTime.now( zoneId );
// example: 2016-07-12T01:43:09.231+02:00[Europe/Madrid]
Создайте экземпляр форматирования, чтобы создать String, чтобы представить это значение даты-времени. Укажите длину текста с помощью FormatStyle
(полный, длинный, средний, короткий).
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.FULL );
Примените Locale
к заменить JVM текущий по умолчанию Locale
, назначенный для форматирования.
Locale locale = new Locale ( "es" , "ES" );
formatter = formatter.withLocale ( locale );
Используйте форматтер для создания объекта String.
String output = zdt.format ( formatter );
// example: martes 12 de julio de 2016
Дамп для консоли.
System.out.println ( "zdt: " + zdt + " with locale: " + locale + " | output: " + output );
zdt: 2016-07-12T01: 43: 09.231 + 02: 00 [Европа/Мадрид] с языком: es_ES | выход: martes 12 de julio de 2016
Ответ 4
Locale esLocale = new Locale("es", "ES");//para trabajar en español
SimpleDateFormat formatter = new SimpleDateFormat(strFormatoEntrada, esLocale);//El formato con que llega mi strFecha más el lenguaje