zona obtener mexico horaria java datetime jodatime

obtener - set zona horaria java



En tiempo joda, cómo convertir la zona horaria sin cambiar el tiempo (5)

Puede usar la clase LocalDateTime

LocalDateTime dt = new LocalDateTime(t.getTime());

y convierte LocalDateTime a DateTime

DateTime dt = new LocalDateTime(timestamp.getTime()).toDateTime(DateTimeZone.UTC);

Joda DateTime trata cualquier momento en millis como "millis desde 1970y en la zona horaria actual ". Por lo tanto, cuando crea una instancia de DateTime , se crea con la zona horaria actual.

Recibo la marca de tiempo UTC de la base de datos, que es la que configuro en una instancia de JodaTime DateTime

DateTime dt = new DateTime(timestamp.getTime());

Almacena el tiempo perfectamente, digamos a las 10:00 AM pero con la zona horaria local. Por ejemplo, estoy en zona horaria IST, que es +5: 30 de UTC

He intentado muchas cosas para cambiar la zona horaria, pero con cada cosa cambia el horario de 10:00 AM a otra cosa usando +5: 30 diferencia

¿Hay alguna manera por la que puedo cambiar TimeZone sin afectar la hora actual

EDITAR: Si mi hora actual es:

2013-09-25 11:27:34 AM UTC

A continuación se muestra el resultado cuando uso este new DateTime(timestamp.getTime());

2013-09-25 11:27:34 AM Asia/Kolkata

Y el siguiente es el resultado cuando uso este new DateTime(timestamp.getTime(), DateTimeZone.UTC) ;

2013-09-25 05:57:34 AM UTC


Puede utilizar el método withZoneRetainFields() de DateTime para modificar la zona horaria sin alterar los números en la fecha.


Así es como lo hago:

private DateTime convertLocalToUTC(DateTime eventDateTime) { // get your local timezone DateTimeZone localTZ = DateTimeZone.getDefault(); // convert the input local datetime to utc long eventMillsInUTCTimeZone = localTZ.convertLocalToUTC(eventDateTime.getMillis(), false); DateTime evenDateTimeInUTCTimeZone = new DateTime(eventMillsInUTCTimeZone); return evenDateTimeInUTCTimeZone.toDate(); }


Si su marca de tiempo es: 2015-01-01T00: 00: 00.000-0500 (esta es la hora local [para mí])

Prueba esto:

DateTime localDt = new DateTime(timestamp.getTime()) .withZoneRetainFields(DateTimeZone.UTC) .withZone(DateTimeZone.getDefault());

2014-12-31T19: 00: 00.000-05: 00

Desglosándolo: le da un DateTime correspondiente a su marca de tiempo, especificando que está en UTC:

new DateTime(timestamp.getTime()) .withZoneRetainFields(DateTimeZone.UTC)

2015-01-01T00: 00: 00.000Z

Esto le da un DateTime pero con el tiempo convertido a su hora local:

new DateTime(timestamp.getTime()) .withZoneRetainFields(DateTimeZone.UTC) .withZone(DateTimeZone.getDefault());

2014-12-31T19: 00: 00.000-05: 00


También tengo otro enfoque que fue muy útil para mí. Quería que mi hilo de flujo de trabajo cambiara temporalmente a una zona horaria específica (conservando el tiempo), y luego, cuando mi código termine, configuré la zona horaria original nuevamente. Resulta que cuando estás usando bibliotecas joda, haces:

TimeZone.setDefault(TimeZone.getTimeZone(myTempTimeZone)); TimeZone.setDefault(timeZone);

No es suficiente. También necesitamos cambiar el TimeZone en DateTimeZone de la siguiente manera:

@Before public void setUp() throws Exception { timeZone = TimeZone.getDefault(); dateTimeZone = DateTimeZone.getDefault(); } @After public void tearDown() throws Exception { TimeZone.setDefault(timeZone); DateTimeZone.setDefault(dateTimeZone); } @Test public void myTest() throws Exception { TimeZone.setDefault(TimeZone.getTimeZone(myTempTimeZone)); DateTimeZone.setDefault(DateTimeZone.forID(myTempTimeZone)); //TODO // my code with an specific timezone conserving time }

Espero que ayude a alguien más también.