2012-06-19 23 views
36

Quiero mostrar la fecha de nacimiento según la configuración regional del usuario. En mi aplicación, uno de mis campos es la fecha de nacimiento, que actualmente está en el formato dd/mm/aaaa. Por lo tanto, si el usuario cambia su configuración regional, el formato de fecha también debería cambiar en consecuencia. Cualquier puntero o ejemplos de código realmente me ayudaría a superar el problema.Formato de fecha según la configuración regional del usuario en android

Respuesta

62

Puede utilizar la clase DateFormat que formatea una fecha según la configuración regional del usuario.

Ejemplo:

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

Usted puede utilizar los diferentes métodos getLongDateFormat, getMediumDateFormat dependiendo del nivel de verbosidad que le gustaría tener.

+3

"DateFormat dateFormat" realmente debería escribirse "java.text.DateFormat formato de fecha". Hay diferentes versiones de DateFormat de varias bibliotecas. – AndroidDev

+1

Al mirar el código fuente, 'android.text.format.DateFormat.getDateFormat (context)' simplemente devuelve 'java.text.DateFormat.getDateInstance (java.text.DateFormat.SHORT)'. De hecho, el argumento 'context' ni siquiera se usa. Creo que prefiero usar 'java.text.DateFormat.getDateInstance (DateFormat.SHORT)' directamente. –

+0

No tengo fecha de entrada en tipo de cadena, tengo Fecha como entrada – user924

11

Para cambiar el formato de fecha en función de la configuración regional, el siguiente código trabajó para mí:

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

Luego, cuando se cambia la configuración regional, el formato de fecha cambiará en función de ello. Para obtener más información acerca de los patrones de fechas: http://docs.oracle.com/javase/tutorial/i18n/format/dateFormat.html

+0

El enlace que proporcionó es útil para mí. Gracias –

+0

mismo aquí! gracias ! –

6

api de Android proporcionan una manera fácil de mostrar el formato de fecha localizada. El siguiente código funciona.

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

Puede verificar el siguiente código.

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

Tan simple como

Por fecha + hora:

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

Por tan sólo la fecha:

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

Solo para corregir el error de copiar y pegar: Para la fecha sin tiempo, llame a getDateInstance (no getDateTimeInstance) – Lensflare

Cuestiones relacionadas