web-dev-qa-db-fra.com

Impossible de traduire la date en espagnol avec les paramètres régionaux ("es_ES")

J'essaie de faire un format de date simple, cela fonctionne très bien, c'est très facile, mais le problème est la langue. J'ai utilisé la locale "es_ES" pour obtenir "Miércoles" au lieu de "mercredi" et trie comme ça mais j'ai échoué.

Voici mon code:

SimpleDateFormat formato = 
    new SimpleDateFormat("EEEE d 'de' MMMM 'de' yyyy", new Locale("es_ES"));
String fecha = formato.format(new Date());

La valeur attendue de la chaîne fecha est:

Miércoles 4 de Abril de 2012

mais je reçois toujours:

Mercredi 4 avril de 2012

Qu'est-ce que je fais mal?

32
Ulises Layera

"es_ES" est une langue + un pays. Vous devez spécifier chaque partie séparément.

Les constructeurs pour Locale sont:

Vous voulez que new Locale("es", "ES"); obtienne les paramètres régionaux qui vont avec es_ES.

Cependant, il serait préférable d'utiliser Locale.forLanguageTag("es-ES") , en utilisant la balise de langage IETF BCP 47 bien formée es-ES (avec - au lieu de _), car cette méthode peut renvoyer un Locale mis en cache, au lieu d'en créer toujours un nouveau.

66
Affe

Java 8

LocalDate today = LocalDate.now();
String day = today.getDayOfWeek().getDisplayName(TextStyle.FULL, new Locale("es","ES")));

Fonctionne également pendant un mois.

4
imTachu

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

Détails

La Réponse acceptée par Affe est correcte. Vous construisiez incorrectement un objet Locale.

Java.time

Les questions et réponses utilisent toutes deux d'anciennes classes dépassées, désormais supplantées par le framework Java.time intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes de date-heure gênantes). tel que Java.util.Date. Voir Tutoriel Oracle . Une grande partie de la fonctionnalité Java.time est back-portée vers Java 6 & 7 in ThreeTen-Backport et encore adaptée à Android dans ThreeTenABP .

Ces classes incluent DateTimeFormatter pour contrôler le format du texte lors de la génération d'une chaîne à partir de votre valeur date-heure. Vous pouvez spécifier un modèle de mise en forme explicite. Mais pourquoi s'embêter? Laissez la classe localiser automatiquement le format en fonction du langage humain et des normes culturelles d'un Locale spécifique.

Par exemple, obtenez l'heure actuelle dans fuseau horaire régional de Madrid .

ZoneId zoneId = ZoneId.of( "Europe/Madrid" );
ZonedDateTime zdt = ZonedDateTime.now( zoneId );
// example: 2016-07-12T01:43:09.231+02:00[Europe/Madrid] 

Instanciez un formateur pour générer une chaîne pour représenter cette valeur date-heure. Spécifiez la longueur du texte via FormatStyle (plein, long, moyen, court).

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.FULL );

Appliquez un Locale à remplacez le JVM par défaut actuelLocale affecté au formateur.

Locale locale = new Locale ( "es" , "ES" );
formatter = formatter.withLocale ( locale );

Utilisez le formateur pour générer un objet String.

String output = zdt.format ( formatter );
// example: martes 12 de julio de 2016

Dump sur console.

System.out.println ( "zdt: " + zdt + " with locale: " + locale + " | output: " + output );

zdt: 2016-07-12T01: 43: 09.231 + 02: 00 [Europe/Madrid] avec paramètres régionaux: es_ES | sortie: martes 12 de julio de 2016

3
Basil Bourque
    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
1
Cristianetoo Geova