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?
"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.
LocalDate today = LocalDate.now();
String day = today.getDayOfWeek().getDisplayName(TextStyle.FULL, new Locale("es","ES")));
Fonctionne également pendant un mois.
String output =
ZonedDateTime.now ( ZoneId.of ( "Europe/Madrid" ) )
.format (
DateTimeFormatter.ofLocalizedDate ( FormatStyle.FULL )
.withLocale ( new Locale ( "es" , "ES" ) )
)
;
martes 12 de julio de 2016
La Réponse acceptée par Affe est correcte. Vous construisiez incorrectement un objet Locale
.
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
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