web-dev-qa-db-fra.com

SimpleDateFormat et chaîne de format basée sur les paramètres régionaux

J'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 "1 nov. 2009" (formaté par "MMM d, aaaa") et les utilisateurs norvégiens voient "1. nov. 2009" ("d. MMM. Aaaa").

La partie mois fonctionne correctement si j'ajoute les paramètres régionaux au constructeur SimpleDateFormat, mais qu'en est-il du reste?

J'espérais pouvoir ajouter des chaînes de format associées à des paramètres régionaux à SimpleDateFormat, mais je ne trouve aucun moyen de le faire. Est-ce possible ou dois-je laisser mon code vérifier les paramètres régionaux et ajouter la chaîne de format correspondante?

69
fiskeben

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

77
jarnbjo

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

Utilisez le style + locale: DateFormat.getDateInstance (style international, 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;
    //Also try with style = DateFormat.FULL and DateFormat.SHORT
    Date date = new Date();
    DateFormat df;
    df = DateFormat.getDateInstance(style, Locale.UK);
    System.out.println("United Kingdom: " + 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("Italy: " + df.format(date));
    df = DateFormat.getDateInstance(style, Locale.JAPAN);
    System.out.println("Japan: " + df.format(date));
  }
}

Sortie:

United Kingdom: 25-Sep-2017
USA: Sep 25, 2017
France: 25 sept. 2017
Italy: 25-set-2017
Japan: 2017/09/25
26
JuanZe

Localisation de la chaîne de date:

Basé sur le post 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("Input date was not correct. Can not localize it.");
        return inputdate;
    }
    return dateFormatCN.format(date);
}

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

sera comme 05- -2013

7
Yaro

Cela affichera la date en fonction des paramètres régionaux actuels de l'utilisateur:

import Java.text.DateFormat;    
import Java.util.Date;

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

31 décembre 1969 7:00:02 PM 

DateFormat.getDateInstance() 

31 décembre 1969

1
live-love
String text = new SimpleDateFormat("E, MMM d, yyyy").format(date);
0
Hadid Graphics

Java 8 Style pour une date donnée

LocalDate today = LocalDate.of(1982, Month.AUGUST, 31);
System.out.println(today.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).withLocale(Locale.ENGLISH)));
System.out.println(today.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).withLocale(Locale.FRENCH)));
System.out.println(today.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).withLocale(Locale.JAPANESE)));
0
Mircea Stanciu