online mexico ids gettimezone example america java timezone jodatime utc

java - mexico - timezone gettimezone gmt 3



Usando Joda-Time para obtener el desplazamiento UTC para una fecha y zona horaria determinadas (5)

Si solo necesita el desplazamiento de la zona horaria, use DateTimeZone.forID() para obtener el huso horario y luego tz.getOffset(instant) para obtener el desplazamiento a UTC en milisegundos.

Puede parecer extraño que necesite un instante para calcular el desplazamiento a UTC, pero esto es necesario para tener en cuenta el horario de verano y los cambios en la zona horaria. Sí, los países cambian sus husos horarios de vez en cuando:

¿Por qué cambian los datos de la zona horaria?

La configuración de la zona horaria se adopta localmente y no existe una autoridad de zona horaria mundial.

EDITAR Esto le da el resultado correcto:

DateTimeFormatter dtf1 = DateTimeFormat.forPattern("ddMMMYYYY"); DateTimeZone zone = DateTimeZone.forID("Australia/Melbourne"); DateTime thisDate = dtf1.parseDateTime("30Jul2013").withZone(zone); assertEquals( 10 * CommonConstants.MILLISECONDS_PER_HOUR, zone.getOffset( thisDate ) );

thisDate.get

Tengo fechas en el formato 20Jan2013, 08Aug2012, etc., con sus propias zonas horarias específicas. Entonces, por ejemplo, 20Jan2013 podría tener una identificación de zona horaria de Australia / Melbourne, y 08Aug2012 podría tener una identificación de Europa / Londres. Lo que quiero hacer es, en base a estas zonas horarias y las fechas, calcular el desplazamiento UTC para esa zona horaria en la fecha indicada. He llegado a esto hasta ahora:

DateTimeFormatter dtf = DateTimeFormat.forPattern("ZZ"); DateTimeFormatter dtf1 = DateTimeFormat.forPattern("ddMMMYYYY"); DateTimeZone zone = DateTimeZone.forID("Australia/Melbourne"); DateTime thisDate = dtf1.parseDateTime("30Jul2013"); System.out.println("/nZone: " + thisDate.withZone(zone));

Esto me da el resultado:

Zone: 2013-07-30T00:00:00.000+10:00

Esto es correcto, pero me gustaría extraer solo el desplazamiento UTC de esto, que en este caso es +10: 00. He buscado formas de hacerlo pero no puedo encontrar nada. ¿Hay alguna manera de que pueda hacer esto? La única opción que veo es convertir el resultado en una cadena y usar el método de subcadena para obtener el desplazamiento UTC.

El código anterior tiene en cuenta el horario de verano (DST). Entonces, por ejemplo, si tuviera: DateTime thisDate = dtf1.parseDateTime ("30Jan2013");

La salida sería: 2013-01-30T00: 00: 00,000 + 11: 00

(+11: 00 al final en lugar de +10: 00)

Entonces, básicamente, todo lo que tengo que hacer es encontrar una forma de extraer +11: 00 de 2013-07-30T00: 00: 00,000 + 11: 00. ¡Por favor ayuda!


Para que Joda dé el desplazamiento correcto, debe proporcionar un instante de fecha y hora. Sin un instante de fecha y hora, es imposible calcular el desplazamiento ya que tenemos diferentes compensaciones (ahorro de luz diurna). Así es como usaría Joda para obtener el desplazamiento en formato + HH: mm:

int offsetInMillis = DateTimeZone.forID(zoneId).getOffset(new DateTime().getMillis()); String offset = String.format("%02d:%02d", Math.abs(offsetInMillis / 3600000), Math.abs((offsetInMillis / 60000) % 60)); offset = (offsetInMillis >= 0 ? "+" : "-") + offset;


Método simple para obtener el nombre de la zona horaria y el desplazamiento en horas

public static String getCurrentTimeZoneOffset() { DateTimeZone tz = DateTimeZone.getDefault(); Long instant = DateTime.now().getMillis(); String name = tz.getName(instant); long offsetInMilliseconds = tz.getOffset(instant); long hours = TimeUnit.MILLISECONDS.toHours( offsetInMilliseconds ); String offset = Long.toString( hours ); return name + " (" + offset + " Hours)"; // Example: "Mountain Standard Time (-7 Hours)" }

Advertencias de pareja:

  • Esto obtiene la DateTimeZone predeterminada de JodaTime . Puede modificarlo para aceptar un DateTimeZone específico que se pasa al método.
  • Esto lo devuelve en un formato como " Mountain Standard Time (-7 Hours) ", pero puede formatearlo como mejor le parezca.

Espero que ayude.

JP


Cuando conoces el desplazamiento y la marca de tiempo, para obtener la hora actual, puedes usar

public static String formatMonthDayMinuteByGivenUtcOffset(long timestamp, int offset) { return JODA_FORMATTER.print(createDateTime(timestamp, offset)); }


Java 8 introdujo un mejor manejo de fecha y hora para abordar algunas de las limitaciones previas del idioma en esa área. Algunos de mis proyectos comenzaron a usarlo en lugar de Joda.

Usando el paquete java.time:

ZonedDateTime dateTime = LocalDate.of(2013 , 1 , 20).atStartOfDay( ZoneId.of("Australia/Melbourne")); ZoneOffset zo = dateTime.getOffset(); int offset = zo.getTotalSeconds(); long hours = TimeUnit.SECONDS.toHours(offset); long minutes = TimeUnit.SECONDS.toMinutes(offset % 3600);

La variable horas se establece en 11 y los minutos en 0.

También calcula el desplazamiento de minutos, para zonas horarias que son horas parciales, como Terranova y Labrador en el este de Canadá:

ZonedDateTime dateTime = LocalDate.of(2013, 1, 20).atStartOfDay( ZoneId.of("Canada/Newfoundland"));

En este caso, la compensación es -03:30 (tres horas y media detrás de UTC), las hours son -3 y los minutes son -30.

Para la representación de String, en lugar del número entero de horas y minutos, use el método ZoneSofing toString (). Entonces, para el ejemplo anterior, usa:

String offsetString = zo.toString();