Подтвердить что ты не робот

Не удалось перевести 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 года

Что я делаю неправильно?

4b9b3361

Ответ 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