2009-11-13 8 views
5

Hemos visto un problema extraño en algunas máquinas con Windows XP que implican la zona horaria "Tiempo universal coordinado". No todos los equipos con Windows XP parecen tenerlo, pero en los que sí, el siguiente programa Java sencilla¿Por qué Java devuelve una fecha en GMT-4.5 al elegir la zona horaria del tiempo universal coordinado en Windows?

public class TimeTest { 
    public static void main(String[] args) { 
     System.out.println(java.util.TimeZone.getDefault()); 
     System.out.println(new java.util.Date()); 
    } 
} 

en JDK 1.6.0_06 impresiones:

 
sun.util.calendar.ZoneInfo[id="America/Caracas",offset=-16200000,dstSavings=0,useDaylight=false,transitions=5,lastRule=null] 
Fri Nov 13 05:34:14 VET 2009 

(es decir, 4 horas y media detrás GMT). Debo añadir que estoy en Londres y nunca he estado en Sudamérica. :-)

Mis preguntas son:

  • dónde viene Java obtener esta zona horaria de? Pensé que se suponía que el Tiempo Universal coordinado sería el nuevo nombre para GMT.
  • ¿Por qué algunas máquinas con Windows tienen esta zona horaria pero no otras?
+1

Vea también http://stackoverflow.com/questions/2106525/java-incorrect-timezone – Vadzim

Respuesta

0

Se está imprimiendo utilizando la zona horaria predeterminada. Su tema habla de "elegir" UTC, pero no veo ninguna opción en su programa. Si lo ha elegido en otro lugar, proporcione detalles de exactamente donde. Si ha cambiado la zona horaria de XP, puede intentar reiniciar: es posible que su código de Java obtenga un valor en caché de alguna parte.

Imprime java.util.TimeZone.getDefault y sospecho que verás VET en las máquinas con el problema.

Si desea que su código usar UTC, se debe especificar explícitamente que ... preferentemente utilizando Joda Time en lugar de la incorporada en el Date/Calendar clases.

EDIT: Si tiene .NET 3.5 en las mismas máquinas, probar este pequeño programa para ver lo que piensa la zona horaria es:

using System; 

class Test 
{ 
    static void Main() 
    { 
     Console.WriteLine(TimeZoneInfo.Local.DisplayName); 
    } 
} 
+0

Al "elegir", me refería a seleccionarlo en el Panel de control/Fecha y hora/Zona horaria, en lugar de establecerlo mediante programación. Cuando lo cambio a otros valores en el Panel de control, Java parece cambiar su idea de la zona horaria predeterminada, pero parece absurdamente apagado para este valor. –

+0

Bien, en ese caso eso es muy extraño. ¿Todas las máquinas (que trabajan + no) usan la misma versión de Java? –

+0

Solo he encontrado dos máquinas con Windows XP que tienen la zona horaria UTC en el Panel de control. Ambos estaban usando 1.6.0_06. ¡Ejecutar el mismo código en 1.5.0_12 da una zona horaria diferente!(ACT = América/Rio_Branco, GMT-05) –

0

que tiene el mismo problema en un Unix/Solaris . El comando date usa una variable Time/Zome cuando un comando como estos "date -u 042315232010". Si usa el parámetro -u la fecha del comando, use una variable llamada TZ y proceda para ajustar la hora GMT contra las de TZ. Para resolver esto, use la opción "fecha 042315232010" y todo funcionó. Quizás debas evitar las oraciones TimeZone en tu programa Java. Por cierto, "date 042315232010" significa "vie 23 de abril 15:23:00 VET 2010".

3

Experimenté Java viendo un huso horario de la hora estándar venezolana (VET) a pesar de que Windows estaba configurado para Pacífico. Esto fue en una caja VMWare recién clonada. Una vez que cambié el huso horario de Pacific a otra cosa, lo guardé, lo cambié de nuevo a Pacific, lo guardé y luego reinicié mi aplicación Java; luego, Java reconoció la zona horaria correcta.

Cuestiones relacionadas