Je souhaite afficher une date de naissance en fonction des paramètres régionaux de l'utilisateur. Dans ma candidature, l'un de mes champs est la date de naissance, qui est actuellement au format dd/mm/yyyy
. Ainsi, si l'utilisateur modifie ses paramètres régionaux, le format de la date doit également changer en conséquence. Tous les pointeurs ou exemples de code m'aideraient vraiment à surmonter le problème.
Vous pouvez utiliser la classe DateFormat qui formate une date en fonction des paramètres régionaux de l'utilisateur.
Exemple:
String dateOfBirth = "26/02/1974";
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date date = null;
try {
date = sdf.parse(dateOfBirth);
} catch (ParseException e) {
// handle exception here !
}
Java.text.DateFormat dateFormat = Android.text.format.DateFormat.getDateFormat(context);
String s = dateFormat.format(date);
Vous pouvez utiliser les différentes méthodes getLongDateFormat
, getMediumDateFormat
en fonction du niveau de verbosité souhaité.
Pour changer le format de date en fonction des paramètres régionaux, le code suivant m'a fonctionné:
String dateOfBirth = "26/02/1974";
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date date = null;
try {
date = sdf.parse(dateOfBirth);
} catch (ParseException e) {
// handle exception here !
}
String myString = DateFormat.getDateInstance(DateFormat.SHORT).format(date);
Ensuite, lorsque vous modifiez les paramètres régionaux, le format de date change en fonction de celui-ci . Pour plus d'informations sur les modèles de dates: http://docs.Oracle.com/javase/tutorial/i18n/format/ dateFormat.html
L'API Android offre un moyen simple d'afficher le format de date localisé. Le code suivant fonctionne.
public class FileDateUtil {
public static String getModifiedDate(long modified) {
return getModifiedDate(Locale.getDefault(), modified);
}
public static String getModifiedDate(Locale locale, long modified) {
SimpleDateFormat dateFormat = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
dateFormat = new SimpleDateFormat(getDateFormat(locale));
} else {
dateFormat = new SimpleDateFormat("MMM/dd/yyyy hh:mm:ss aa");
}
return dateFormat.format(new Date(modified));
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public static String getDateFormat(Locale locale) {
return DateFormat.getBestDateTimePattern(locale, "MM/dd/yyyy hh:mm:ss aa");
}
}
Vous pouvez vérifier le code suivant.
String koreaData = FileDateUtil.getModifiedDate(Locale.KOREA, System.currentTimeMillis());
String franceData = FileDateUtil.getModifiedDate(Locale.FRENCH, System.currentTimeMillis());
String defaultData = FileDateUtil.getModifiedDate(Locale.getDefault(), System.currentTimeMillis());
String result = "Korea : " + koreaData + System.getProperty("line.separator");
result += "France : " + franceData + System.getProperty("line.separator");
result += "Default : " + defaultData + System.getProperty("line.separator");
tv.setText(result);
Aussi simple que
Pour date + heure:
DateFormat format = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.SHORT, Locale.getDefault());
Pour juste date:
DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault());
Pour obtenir le modèle de format de date, vous pouvez faire:
Format dateFormat = Android.text.format.DateFormat.getDateFormat(getApplicationContext());
String pattern = ((SimpleDateFormat) dateFormat).toLocalizedPattern();
Après cela, vous pouvez formater votre entrée selon le modèle.