2011-02-20 25 views
22

Soy nuevo en Java y desarrollo de Android por lo que esta podría ser una pregunta estúpida, pero yo he estado buscando desde hace días y no pueden encontrar una solución:Fecha y hora de formato según la zona

I intente generar un java.util.Date según la configuración regional del usuario.

búsqueda en StackOverflow me llevó a esto:

java.util.Date date = new Date(); 
String dateString = DateFormat.getDateFormat(getApplicationContext()).format(date); 

Este salidas:

20/02/2011 

En mi teléfono localizado francés. Casi bien.

¿Cómo puedo también generar horas, minutos y segundas partes del Date, utilizando la configuración regional del usuario? He estado buscando en la documentación de Android pero no he podido encontrar nada.

Muchas gracias.

Respuesta

-3

Si desea que las horas segundos y milisegundos de la localización actual a continuación, utilizar Calendar.getInstance() getTime() le dará tiempo de localización actual

+1

Esto devuelve un objeto 'Fecha', y esta pregunta se trata de formatearlo en una cadena. – poolie

3
.

DateFormat.getTimeInstance() obtiene el formateador de tiempo con el estilo de formato predeterminado para la configuración regional predeterminada. También puede pasar un estilo y un Locale.

1
public static String formatDate(Date date, boolean withTime) 
{ 
    String result = ""; 
    DateFormat dateFormat; 

    if (date != null) 
    { 
     try 
     { 
      String format = Settings.System.getString(context.getContentResolver(), Settings.System.DATE_FORMAT); 
      if (TextUtils.isEmpty(format)) 
      { 
       dateFormat = android.text.format.DateFormat.getDateFormat(context); 
      } 
      else 
      { 
       dateFormat = new SimpleDateFormat(format); 
      } 
      result = dateFormat.format(date); 

      if (withTime) 
      { 
       dateFormat = android.text.format.DateFormat.getTimeFormat(context); 
       result += " " + dateFormat.format(date); 
      } 
     } 
     catch (Exception e) 
     { 
     } 
    } 

    return result; 
} 
+5

Parece correcto, pero no debe neutralizar la excepción de esa manera. – JoshDM

4

java.text.DateFormat tiene todas las funciones que pueda necesitar:

DateFormat.getDateInstance()

DateFormat.getTimeInstance()

Pero el que necesita es:

DateFormat.getDateTimeInstance() También puede especificar la longitud de la parte de fecha/hora y la configuración regional. El resultado final sería:

DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT, Locale.FRENCH).format(Date);

Fuente: http://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html

7

tl; dr

ZonedDateTime.now(ZoneId.of("Asia/Kolkata")) 
      .format(DateTimeFormatter.ofLocalizedDateTime (FormatStyle.FULL).withLocale (Locale.FRENCH)) 

java.time

el código en la pregunta utiliza problemático antigua fecha y hora clases, ahora heredadas, suplantadas por las clases java.time integradas en Java 8 y posteriores.

La configuración regional y la zona horaria no tienen nada que ver entre sí. La configuración regional determina el lenguaje humano y las normas culturales utilizadas al generar una Cadena para representar un valor de fecha y hora. La zona horaria determina el wall-clock time de una región particular utilizada para representar un momento en la línea de tiempo.

La clase Instant representa un momento en la línea de tiempo en UTC con una resolución de nanoseconds (hasta nueve (9) dígitos de una fracción decimal).

Instant instant = Instant.now(); 

2016-10-12T07: 21: 00.264Z

Aplicar una zona de tiempo para obtener una ZonedDateTime. Yo elijo arbitrariamente mostrar este momento usando la zona horaria de India. Mismo momento, mismo punto en la línea de tiempo.

ZoneId z = ZoneId.of("Asia/Kolkata"); 
ZonedDateTime zdt = instant.atZone(z); 

2016-10-12T12: 51: 00,264 + 05: 30 [Asia/Calcuta]

generar una cadena usando la localidad de Québec Canadá. Deje java.time localizar automáticamente la cadena.

Locale l = Locale.CANADA_FRENCH; 
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime (FormatStyle.FULL).withLocale (l); 
String output = zdt.format (f); // Indian time zone with Québécois presentation/translation. 

mercredi 12 octobre 2016 12 h 51 IST


Sobre java.time

El marco java.time está incorporado en Java 8 y versiones posteriores. Estas clases suplantan a las viejas y problemáticas clases de fecha y hora legacy, como java.util.Date, .Calendar, & java.text.SimpleDateFormat. El proyecto Joda-Time, ahora en maintenance mode, recomienda la migración a java.time.

Para obtener más información, consulte el Oracle Tutorial. Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310.

¿Dónde obtener las clases java.time?

  • Java SE 8 y SE 9 y más tarde
    • incorporado.
    • Parte de la API estándar de Java con una implementación integrada.
    • Java 9 agrega algunas características menores y correcciones.
  • Java SE 6 y SE 7
    • Gran parte de la funcionalidad de back-java.time está portado a Java 6 & 7 en ThreeTen-Backport.
  • Android
    • El proyecto ThreeTenABP adapta ThreeTen-Backport (mencionado anteriormente) para Android específicamente.
    • Ver How to use….

El proyecto se extiende ThreeTen-Extra java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval, YearWeek, YearQuarter y more.

+0

"Estás usando clases de fecha y hora problemáticas" Bueno, para ser justos, hice la pregunta en 2011. Gracias por seguirme. Es posible que desee editar la respuesta para dejar en claro que las cosas han cambiado hoy en día. Tal como está, se lee como si usar esas clases fuera lo incorrecto en ese momento, lo que puede confundir a las personas. – ereOn

+1

Gracias por esta respuesta bien escrita y concluyente. – Hank

Cuestiones relacionadas