Formatage de la date basé sur les parameters régionaux de l’utilisateur sur Android

Je souhaite afficher une date de naissance en fonction des parameters régionaux de l’utilisateur. Dans ma demande, l’un de mes champs est la date de naissance, qui est actuellement au format dd/mm/yyyy . Donc, si l’utilisateur modifie ses parameters régionaux, le format de date devrait également changer en conséquence. Tout pointeur ou exemple de code m’aiderait vraiment à surmonter le problème.

Vous pouvez utiliser la classe DateFormat qui formate une date en fonction des parameters régionaux de l’utilisateur.

Exemple:

 Ssortingng 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); Ssortingng s = dateFormat.format(date); 

Vous pouvez utiliser les différentes méthodes getLongDateFormat , getMediumDateFormat fonction du niveau de verbosité getMediumDateFormat .

Pour modifier le format de date en fonction des parameters régionaux, le code suivant a fonctionné pour moi:

  Ssortingng 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 ! } Ssortingng mySsortingng = DateFormat.getDateInstance(DateFormat.SHORT).format(date); 

Ensuite, lorsque vous modifiez les parameters régionaux, le format de date changera 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

Android api fournit un moyen facile d’afficher le format de date localisée. Le code suivant fonctionne.

 public class FileDateUtil { public static Ssortingng getModifiedDate(long modified) { return getModifiedDate(Locale.getDefault(), modified); } public static Ssortingng 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 Ssortingng getDateFormat(Locale locale) { return DateFormat.getBestDateTimePattern(locale, "MM/dd/yyyy hh:mm:ss aa"); } } 

Vous pouvez vérifier le code suivant.

 Ssortingng koreaData = FileDateUtil.getModifiedDate(Locale.KOREA, System.currentTimeMillis()); Ssortingng franceData = FileDateUtil.getModifiedDate(Locale.FRENCH, System.currentTimeMillis()); Ssortingng defaultData = FileDateUtil.getModifiedDate(Locale.getDefault(), System.currentTimeMillis()); Ssortingng 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());