2010-01-21 25 views
9

Tengo una instancia de Java que parece estar utilizando una zona horaria completamente incorrecta. En lugar de utilizar la zona horaria de Australia/Sydney que usa Windows, está utilizando la zona horaria de América/Caracas.java incorrecta zona horaria

Revisé el tiempo de Windows a través del reloj del sistema en primer lugar, luego marqué HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/ y ControlSet001, ControlSet002. Todos están configurados en una zona horaria de Sydney.

¿Alguien sabe si esto es un error en Java, o si se refiere a una hora establecida en otro lugar?

versión

Java 1.6.0_06 es

+0

En los viejos tiempos, he visto a una JVM pensando que la zona horaria "MET" en OS/2 no era la zona horaria de la Europa central, sino la zona horaria de Medio Oriente. Me tomó un tiempo averiguar por qué todas las fechas tenían 3,5 horas de descanso. –

Respuesta

11

Asegúrese de configurar la zona horaria para la JVM al iniciar la aplicación:

-Duser.timezone="Australia/Sydney" 
+0

Estaba esperando una solución adecuada, pero terminé yendo con esta solución. –

+0

y si quiero configurar UTC? –

+0

-Duser.timezone = "UTC" –

2

intento en su aplicación obtenga zona horaria por defecto, o configurar manualmente la zona horaria (línea comentada)

pequeño ejemplo de la mina:

import java.text.DateFormat; 
import java.util.Date; 
import java.util.Locale; 
import java.util.TimeZone; 

public class Main { 
    public static void main(String[] args) { 
     Locale locale = Locale.getDefault(); 
     TimeZone localTimeZone = TimeZone.getDefault(); 
     //TimeZone localTimeZone = TimeZone.getTimeZone("Australia/Sydney"); 
     DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, locale); 
     dateFormat.setTimeZone(localTimeZone); 
     Date rightNow = new Date(); 
     System.out.println(locale.toString() + ": " + dateFormat.format(rightNow)); 
    } 
} 
+0

Gracias chicos, me pregunto sin embargo _por qué_ debería tener que especificar manualmente la zona horaria. ¿No debería ser lo mismo que el sistema operativo? –

+0

BTW, el código anterior devuelve la configuración regional correcta, pero la zona horaria incorrecta. –

+0

Debería ser. Puede intentar actualizar Java a la versión más nueva, en caso de que haya un error. – balent

2

Tuve el mismo problema recientemente, aparentemente esto es causado por una ambigüedad de cómo Windows representa su configuración de zona horaria en el registro y Java no puede interpretarla correctamente.

Más detalles se pueden encontrar en this article, que también describe "curas" para la máquina afectada:

  • cambio en la fecha/hora de forma manual y luego cambiar de nuevo a la hora correctas originales.
  • Cambiando la zona horaria y luego volviendo a la original.
  • Solicitud de actualización automática de hora desde el servidor de hora.
+0

Tuvimos el mismo problema con Java 7 después de actualizar a Windows Server 2008. Cambiar el huso horario del sistema y luego restaurarlo solucionó el problema. –

0

que tenían el mismo error, mientras que yo estaba poniendo mi zona horaria a la Península de Malaca Standard Time, la JVM me dio Venezuela Tiempo zona horaria.

La siguiente corrección funciona para mí:

En el editor de registro, edite su zona horaria a otra zona horaria (que estaba tratando de poner otro texto como "Singapur Tiempo" Usted puede encontrar el registro aquí:.

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/control/TimeZoneInformation

y entonces, restablecer de nuevo a mi zona horaria deseada mediante el Panel de control, Fecha y hora ajuste. Cuando compruebo de nuevo al editor de registro, puedo ver que se revierte a la hora estándar de la península malaya. Y mi JVM lo lee correctamente ahora...

1

Hay una historia de tales problemas que van y vienen, y no hay una solución razonable. Ver más aquí: Java incorrect time zone bug on Windows

Editar: Responder a Tom y Francis: En breve, el tiempo de ejecución de Java tiene dificultades para hacer el trabajo de averiguar correctamente la zona horaria actual en el equipo.

La información del registro de Windows en las zonas horarias no ha sido confiable, y lo mismo para la API nativa de Windows que se basa en msvcrt.dll y varios msvcrxx.dll. También hay una API administrada (.NET) que requiere la instalación de una versión determinada de .NET Framework que contradice la portabilidad de Java.

Por lo tanto, los desarrolladores de tiempo de ejecución de Java tienen dificultades con la zona horaria actual en Windows, y esto puede continuar hasta que Microsoft tenga alguna razón para cooperar.

Si desea que su aplicación Java funcione correctamente en cualquier zona horaria, brinde a los usuarios la posibilidad de corregir la zona horaria mediante la GUI.

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. – Tom

Cuestiones relacionadas