100 votes

SimpleDateFormat et chaîne de format basée sur la locale

Je essaie de formater une date en Java de différentes manières en fonction de la locale donnée. Par exemple, je veux que les utilisateurs anglais voient "Nov 1, 2009" (formaté par "MMM d, yyyy") et les utilisateurs norvégiens voient "1. nov. 2009" ("d. MMM. yyyy").

La partie du mois fonctionne bien si j'ajoute la locale au constructeur SimpleDateFormat, mais qu'en est-il du reste?

Je espérais pouvoir ajouter des chaînes de format associées à des locales à SimpleDateFormat, mais je ne trouve aucun moyen de le faire. Est-ce possible ou dois-je laisser mon code vérifier la locale et ajouter la chaîne de format correspondante?

97voto

jarnbjo Points 18238

Utilisez DateFormat.getDateInstance(int style, Locale locale) au lieu de créer vos propres modèles avec SimpleDateFormat.

97voto

redsonic Points 973
SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE dd MMM yyyy", Locale.ENGLISH);
String formatted = dateFormat.format(the_date_you_want_here);

35voto

JuanZe Points 4519

Utilisez le style + locale : DateFormat.getDateInstance(int style, Locale locale)

Vérifiez http://java.sun.com/j2se/1.5.0/docs/api/java/text/DateFormat.html

Exécutez l'exemple suivant pour voir les différences :

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

public class DateFormatDemoSO {
  public static void main(String args[]) {
    int style = DateFormat.MEDIUM;
    //Essayez également avec style = DateFormat.FULL et DateFormat.SHORT
    Date date = new Date();
    DateFormat df;
    df = DateFormat.getDateInstance(style, Locale.UK);
    System.out.println("Royaume-Uni : " + df.format(date));
    df = DateFormat.getDateInstance(style, Locale.US);
    System.out.println("USA : " + df.format(date));   
    df = DateFormat.getDateInstance(style, Locale.FRANCE);
    System.out.println("France : " + df.format(date));
    df = DateFormat.getDateInstance(style, Locale.ITALY);
    System.out.println("Italie : " + df.format(date));
    df = DateFormat.getDateInstance(style, Locale.JAPAN);
    System.out.println("Japon : " + df.format(date));
  }
}

Résultat :

Royaume-Uni : 25-sept.-2017
USA : sept. 25, 2017
France : 25 sept. 2017
Italie : 25-set-2017
Japon : 2017/09/25

9voto

Localisation de la chaîne de date :

Basé sur le message de redsonic :

private String localizeDate(String inputdate, Locale locale) { 

    Date date = new Date();
    SimpleDateFormat dateFormatCN = new SimpleDateFormat("dd-MMM-yyyy", locale);       
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy");

    try {
        date = dateFormat.parse(inputdate);
    } catch (ParseException e) {
        log.warn("La date d'entrée n'était pas correcte. Impossible de la localiser.");
        return inputdate;
    }
    return dateFormatCN.format(date);
}

String localizedDate = localizeDate("05-Sep-2013", new Locale("zh","CN"));

sera comme 05-九月-2013

5voto

40-Love Points 1333

Ceci affichera la date selon le paramètre local actuel de l'utilisateur:

Pour retourner la date et l'heure:

import java.text.DateFormat;    
import java.util.Date;

Date date = new Date();
DateFormat df = DateFormat.getDateTimeInstance();
String myDate = df.format(date);

31 déc. 1969 19:00:02

Pour retourner uniquement la date, utilisez:

DateFormat.getDateInstance() 

31 déc. 1969

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X