2012-05-13 23 views
12

que tienen este problema raro, cuando creo un calendario con una configuración regional, la zona horaria solo invierte a nivel local una¿Cómo obtener la hora y la zona horaria actual de Locale?

public void start(Locale locale){ 
    String s = locale.getDisplayName(); 
    System.err.println(s); 
    Calendar c = new GregorianCalendar(locale); 
    System.err.println(c.getTimeZone()); 
} 

Y esta es la salida:

español (Argentina) 
sun.util.calendar.ZoneInfo[id="Europe/Bucharest", //etc more useless date here.... 

¿Cómo puedo obtener el el tiempo apropiado de una localidad específica?

+2

Probablemente duplicado: http://stackoverflow.com/questions/1723073/is-it-possible-to-list-available -timezones-by-locale-in-java –

+0

Locale y TimeZone no están necesariamente relacionadas con 1: 1. Piensa en la configuración regional en_US. Hay diferentes zonas horarias para EE. UU. (-> HST, AKDT, PDT, MDT, CDT, EDT). – Javaguru

+0

y [duplicar a otro] (http://stackoverflow.com/questions/1305350/how-to-get-the-current-date-and-time-of-your-timezone-in-java) –

Respuesta

34

La respuesta corta: no se puede.

La respuesta larga: No existe la "zona horaria adecuada para una localidad". Eso es solo porque hay algunos países que tienen más de una zona horaria (por ejemplo, Estados Unidos). La zona horaria es un concepto diferente.

De todos modos, usted está tratando de resolver su problema. Supongo que está escribiendo una aplicación web y ve que la zona horaria está volviendo al valor predeterminado del servidor. Esa es una situación típica. Tanto Locale.getDefault() como TimeZone.getDefault() devolverán información relacionada con el servidor. La JVM no tiene forma de conocer la zona horaria "correcta". Entonces, ¿qué puede hacer usted al respecto?

  1. Puede agregar información de zona horaria al perfil de usuario (si tiene una), o crear un cuadro combinado de zona horaria (para que el usuario pueda cambiar en tiempo de ejecución). Luego puede asignar un objeto apropiado a la instancia DateFormat y convertirá la zona horaria automáticamente.
  2. Puede leer el actual zona tiempo de desplazamiento desde el cliente a través de la función JavaScript Fecha de objeto y de alguna manera getTimezoneOffset() (AJAX) enviarla al servidor. El problema con este método es que hay varias zonas horarias con esa compensación, y la zona horaria seleccionada podría ser inapropiada para otras fechas. Por supuesto, puede adivinar el huso horario consultando los datos alrededor de la fecha de cambio de hora, pero probablemente esto no sea lo que quiere hacer.
  3. Puede enviar la hora no formateada al cliente (por ejemplo, escrita como ISO 8601 date-time format o como Unix time of the epoch en relación con UTC) y tener la fecha y hora del formato Globalize o Dojo.

De estas tres opciones posibles, siempre opto por el número 1. Al poner la información de zona horaria en el perfil del usuario, se seguro cuál es su zona horaria preferida, independientemente de su navegador web actual, etc. Tenga en cuenta que algunos usuarios pueden querer usar su aplicación mientras visitan otros países ...

+0

También hay otra posibilidad, p. si su sitio web enumera los horarios de apertura de los restaurantes. En tal caso, los visitantes esperarán que las horas estén en la zona horaria de la ubicación del restaurante. – herman

+0

@herman: Eso es verdad. Los horarios de apertura de alguna tienda, restaurante, biblioteca o lo que sea deberían estar listados en su zona horaria local.Sin embargo, normalmente sería texto de forma libre, en lugar de texto formateado, por lo que no tiene sentido convertir las zonas horarias aquí. Además, agregar la palabra "(local)" tiene sentido si el lugar es visitado con frecuencia por los turistas ... –

Cuestiones relacionadas