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?
Utilisez DateFormat.getDateInstance (style international, locale) au lieu de créer vos propres modèles avec SimpleDateFormat
.
SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE dd MMM yyyy", Locale.ENGLISH);
String formatted = dateFormat.format(the_date_you_want_here);
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
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
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
String text = new SimpleDateFormat("E, MMM d, yyyy").format(date);
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)));