mexico gettimezone cst chile america java timezone

java - cst - timezone gettimezone utc



¿Cómo obtengo el desplazamiento del verano británico(BST) en Java? (4)

En el Reino Unido, me gustaría obtener el desplazamiento actual de UTC / GMT. Actualmente, el desplazamiento es de 1 hora, pero parece que no hay forma de encontrarlo.

Código

TimeZone timeZone = TimeZone.getDefault(); logger.debug("Timezone ID is ''" + timeZone.getID() + "''"); if (timeZone.getID().equals("GMT")) { timeZone = TimeZone.getTimeZone("Europe/London"); logger.debug("New timezone is ''" + timeZone.getID() + "''"); } Long eventDateMillis = Long.parseLong(eventDateValue.getKeyValue()); int timezoneOffset = timeZone.getOffset(eventDateMillis); logger.debug("Offset for " + eventDateValue + "(" + eventDateMillis + ") using timezone " + timeZone.getDisplayName() + " is " + timezoneOffset);

devuelve la salida de depuración

Wed 2012/09/19 16:38:19.503|Debug|DataManagement|Timezone ID is ''GMT'' Wed 2012/09/19 16:38:19.503|Debug|DataManagement|New timezone is ''GMT'' Wed 2012/09/19 16:38:19.557|Debug|DataManagement|Offset for 18 Sep 2012 09:00(1347958800000) using timezone Greenwich Mean Time is 0

En otras palabras, la zona horaria ''GMT'' devuelve un desplazamiento de cero y no puedo encontrar cómo configurarlo para que devuelva el desplazamiento correcto.

Si alguien puede proporcionar una muestra de código de trabajo para JodaTime, eso sería útil, pero realmente me gustaría evitar tener que instalar una biblioteca por separado para lo que debería ser una línea.

La versión de Java es 7.


En otras palabras, la zona horaria ''GMT'' devuelve un desplazamiento de cero y no puedo encontrar cómo configurarlo para que devuelva el desplazamiento correcto.

0 es la compensación correcta para GMT, de forma permanente.

Quieres "Europa / Londres", que es la zona horaria que cambia entre GMT y BST.

EDITAR: Originalmente no me había dado cuenta de que estás tratando de llegar a Europa / Londres. Parece que la base de datos de zona horaria que está utilizando su JVM está básicamente desordenada. Puedes intentar solucionarlo o simplemente usar Joda Time, que viene con su propia copia de tzdb. Código de muestra:

DateTimeZone zone = DateTimeZone.forID("Europe/London"); long offset = zone.getOffset(new Instant()); System.out.println(offset); // 3600000


Me acabo de encontrar esto yo mismo.

Intenté TimeZone.getTimeZone ("London"); Y funcionó.

No, no tengo idea de por qué: "Londres" no es una de las identidades que TimeZone devuelve ...


Use timezone.getOffset (0), en lugar de timezone.getOffset (eventDateMillis).

Esto le dará la compensación a partir del 1 de enero de 1970, hora GMT, que en el caso de Europa / Londres es 3600000, NO es cero debido a problemas históricos con Gales e Irlanda del Norte.


Esto me hizo el truco:

String zone = "Europe/London"; int plusHoursGMT = TimeZone.getTimeZone(zone).getRawOffset() / 3600000; assertThat(plusHoursGMT, is(0));