android - studio - kotlin format date




Datumsformatierung basierend auf dem Benutzergebietsschema auf Android (4)

Ich möchte ein Geburtsdatum basierend auf dem Gebietsschema des Benutzers anzeigen. In meiner Bewerbung ist eines meiner Felder das Geburtsdatum, das derzeit im Format dd/mm/yyyy . Wenn der Benutzer sein Gebietsschema ändert, sollte sich auch das Datumsformat entsprechend ändern. Zeiger oder Codebeispiele würden mir wirklich helfen, das Problem zu überwinden.


Android-API bietet eine einfache Möglichkeit, das lokalisierte Datumsformat anzuzeigen. Der folgende Code funktioniert.

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");
    }
}

Sie können folgenden Code überprüfen.

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

Sie können die DateFormat Klasse verwenden, die ein Datum gemäß dem Benutzergebietsschema formatiert.

Beispiel:

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

Sie können die verschiedenen Methoden getLongDateFormat und getMediumDateFormat abhängig von der getMediumDateFormat Ausführlichkeit.


Um das Datumsformat entsprechend dem Gebietsschema zu ändern, funktionierte der folgende Code für mich:

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

Wenn Sie das Gebietsschema ändern, ändert sich das Datumsformat danach. Weitere Informationen zu den Datumsmustern finden Sie unter http://docs.oracle.com/javase/tutorial/i18n/format/dateFormat.html


Um das Datumsformatmuster zu erhalten, können Sie Folgendes tun:

Format dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
String pattern = ((SimpleDateFormat) dateFormat).toLocalizedPattern();

Danach können Sie Ihre Eingabe nach dem Muster formatieren.







date-format