with specific mexico gettimezone cst create chile america java timezone

java - specific - Obtenga el valor de compensación de TimeZone de TimeZone sin el nombre de TimeZone



timezone gettimezone utc (5)

Necesito guardar la zona horaria del teléfono en el formato [+/-] hh: mm

Estoy usando la clase TimeZone para manejar esto, pero el único formato que puedo obtener es el siguiente:

PST -05:00 GMT +02:00

Preferiría no subscribir el resultado, ¿hay algún indicador de tecla u opción que pueda establecer para obtener solo el valor y no el nombre de esa zona horaria (GMT / CET / PST ...)?


Necesito guardar la zona horaria del teléfono en el formato [+/-] hh: mm

No, tu no. La compensación por sí sola no es suficiente, necesita almacenar el nombre / ID de la zona horaria completa. Por ejemplo, vivo en Oslo, donde mi desplazamiento actual es +02: 00 pero en invierno (debido a dst ) es +01: 00. El cambio exacto entre el horario estándar y el horario de verano depende de factores que no desea explorar.

Entonces, en lugar de almacenar + 02:00 (¿o debería ser + 01:00 ?), Guardo "Europe/Oslo" en mi base de datos. Ahora puedo restaurar la configuración completa usando:

TimeZone tz = TimeZone.getTimeZone("Europe/Oslo")

¿Quieres saber cuál es mi compensación de zona horaria hoy?

tz.getOffset(new Date().getTime()) / 1000 / 60 //yields +120 minutes

Sin embargo, lo mismo en diciembre:

Calendar christmas = new GregorianCalendar(2012, DECEMBER, 25); tz.getOffset(christmas.getTimeInMillis()) / 1000 / 60 //yields +60 minutes

Suficiente para decir: almacene el nombre o id. De la zona horaria y cada vez que desee mostrar una fecha, compruebe cuál es el desfase actual (hoy) en lugar de almacenar el valor fijo. Puede usar TimeZone.getAvailableIDs() para enumerar todos los ID de zona horaria admitidos.


@MrBean - Estaba en una situación similar en la que tuve que llamar a un servicio web externo y pasar el desfase horario actual del dispositivo Android en el formato +/- hh: mm. Aquí está mi solución:

public static String getCurrentTimezoneOffset() { TimeZone tz = TimeZone.getDefault(); Calendar cal = GregorianCalendar.getInstance(tz); int offsetInMillis = tz.getOffset(cal.getTimeInMillis()); String offset = String.format("%02d:%02d", Math.abs(offsetInMillis / 3600000), Math.abs((offsetInMillis / 60000) % 60)); offset = (offsetInMillis >= 0 ? "+" : "-") + offset; return offset; }



Sé que esto es viejo, pero pensé que iba a dar mi opinión. Tenía que hacer esto para un proyecto en el trabajo y esta era mi solución.

Tengo un objeto Building que incluye la zona horaria utilizando la clase TimeZone y quería crear campos zoneId y offset en una nueva clase.

Entonces lo que hice fue crear:

private String timeZoneId; private String timeZoneOffset;

Luego, en el constructor, pasé en el objeto Building y establecí estos campos así:

this.timeZoneId = building.getTimeZone().getID(); this.timeZoneOffset = building.getTimeZone().toZoneId().getId();

Entonces timeZoneId podría ser algo así como "EST" Y timeZoneOffset podría ser algo así como "-05: 00"

Me gustaría que no es posible que no


ZoneId here = ZoneId.of("Europe/Kiev"); ZonedDateTime hereAndNow = Instant.now().atZone(here); String.format("%tz", hereAndNow);

le dará una representación de cadena estandarizada como "+0300"