2012-06-19 16 views
36

Chcę wyświetlić datę urodzenia na podstawie lokalizacji użytkownika. W mojej aplikacji jednym z moich pól jest data urodzenia, która jest obecnie w formacie dd/mm/rrrr. Więc jeśli użytkownik zmieni swoje ustawienia regionalne, format daty również powinien się odpowiednio zmienić. Wszelkie wskazówki lub próbki kodu naprawdę pomogłyby mi przezwyciężyć problem.Formatowanie daty na podstawie ustawień narodowych użytkownika na Androidzie

Odpowiedz

62

Można użyć klasy DateFormat, która formatuje datę zgodnie z ustawieniami regionalnymi użytkownika.

Przykład:

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

można użyć różnych metod getLongDateFormat, getMediumDateFormat zależności od poziomu oznajmiania chcesz mieć.

+3

"DateFormat dateformat" powinien naprawdę być napisane „java.text.DateFormat format daty". Istnieją różne wersje DateFormat z różnych bibliotek. – AndroidDev

+1

Patrząc na kod źródłowy, 'android.text.format.DateFormat.getDateFormat (kontekst)' zwraca po prostu 'java.text.DateFormat.getDateInstance (java.text.DateFormat.SHORT)'. W rzeczywistości argument 'context' nie jest nawet używany. Myślę, że wolę po prostu użyć 'java.text.DateFormat.getDateInstance (DateFormat.SHORT)' bezpośrednio. –

+0

Nie mam daty wprowadzenia w typie ciągu, mam datę jako dane wejściowe – user924

11

Aby zmienić format daty w zależności od lokalizacji, następujący kod pracował dla mnie:

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

Wtedy, kiedy zmienić ustawienia regionalne, format data zmieni się na niej oparta. Aby uzyskać więcej informacji o wzorcach dat: http://docs.oracle.com/javase/tutorial/i18n/format/dateFormat.html

+0

Podany link jest dla mnie przydatny. Dzięki –

+0

samo tutaj! Dziękuję Ci ! –

6

Android api zapewnia łatwy sposób wyświetlania zlokalizowanego formatu daty. Poniższy kod działa.

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

Możesz sprawdzić poniższy kod.

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

Proste jak

Dla data + czas:

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

dla właśnie data:

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

Tylko w celu skorygowania błędu wklejania kopii: W przypadku daty bez czasu wywołaj getDateInstance (nie getDateTimeInstance) – Lensflare

Powiązane problemy