web-dev-qa-db-fra.com

Format de date basé sur les paramètres régionaux de l'utilisateur sur Android

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.

44
shailbenq

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é.

77
Super Chafouin

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

12

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);
9
Justin Song

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());
7
David_E

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.

0
manish poddar