2012-06-19 7 views
36

Ich möchte das Geburtsdatum basierend auf dem Benutzergebietsschema anzeigen. In meiner Bewerbung ist eines meiner Felder das Geburtsdatum welches gerade im Format TT/MM/JJJJ ist. Wenn der Benutzer sein Gebietsschema ändert, sollte sich das Datumsformat entsprechend ändern. Irgendwelche Zeiger oder Codebeispiele würden mir wirklich helfen, das Problem zu überwinden.Datumsformatierung basierend auf Benutzergebietsschema auf Android

Antwort

62

Sie können die Klasse DateFormat verwenden, die ein Datum entsprechend 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, verwenden getMediumDateFormat je nach dem Grad der Ausführlichkeit Sie haben möchten.

+3

"Dateformat Datumsformat" sollte eigentlich „java.text.DateFormat geschrieben werden Datumsformat". Es gibt verschiedene Versionen von DateFormat aus verschiedenen Bibliotheken. – AndroidDev

+1

Mit Blick auf den Quellcode gibt 'android.text.format.DateFormat.getDateFormat (context)' einfach 'java.text.DateFormat.getDateInstance (java.text.DateFormat.SHORT)' zurück. Tatsächlich wird das Argument 'context' nicht einmal verwendet. Ich denke, ich bevorzuge es, 'java.text.DateFormat.getDateInstance (DateFormat.SHORT)' direkt zu verwenden. –

+0

Ich habe kein Eingabedatum in String-Typ, ich habe Datum als Eingabe – user924

11

Um das Datumsformat ändert den Lokalisierungs nach arbeitete der folgende Code zu mir:

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

Dann, wenn Sie das Gebietsschema ändern, wird das Datumsformat basierend auf ändern. Weitere Informationen zu den Datumsmustern: http://docs.oracle.com/javase/tutorial/i18n/format/dateFormat.html

+0

Der von Ihnen angegebene Link ist nützlich für mich. Danke –

+0

gleich hier! Danke ! –

6

Android API bieten eine einfache Möglichkeit, 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 den 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); 
5

So einfach wie

Für Datum + Uhrzeit:

DateFormat format = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.SHORT, Locale.getDefault()); 

Für nur Datum:

DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault()); 
+0

Nur zum Korrigieren des Copy-Paste-Fehlers: Rufen Sie für das Datum ohne Zeit getDateInstance auf (nicht getDateTimeInstance) – Lensflare