La conversión de zonas horarias de una cadena a UTC (JODA TIEMPO)

El Sr. Octodood:

Tengo una marca de hora UTC almacenada en la base de datos. Cuando recupero que UTC marca de tiempo y lo eché en una cadena. Quiero tomar esa marca de hora UTC cadena y convertirla en hora local del dispositivo mediante Joda Time. Cualquiera que posiblemente podría ayudar con esto. Sería muy apreciada! Esto es lo que estoy haciendo ahora:

                String date = ""+ds.child("datecreated").getValue();

                DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

                DateTime dt = formatter.parseDateTime(date);

                DateTime dt2 = new DateTime(dt).toDateTime(DateTimeZone.getDefault());

                String personalDate = dt2.toString();

                dateTV.setText(personalDate);

                System.out.println("THIS IS THE FIRST TIME: " + dt + "THIS IS THE SECOND TIME: " + dt2); 

El problema se ve es que me está dando exactamente el mismo momento en que me convierto a mi tiempo local, que no debería estar haciendo ya que está siendo almacenada en UTC y yo estoy convirtiendo a Eastern Standard Time, que es por defecto de mi teléfono.

VV Ole:

Para demostrar que Andreas en el comentario ha dado en el clavo en la derecha: me encontré con el siguiente fragmento de la zona horaria America / Coral_Harbour (ya que no sabía su zona horaria exacta, hora estándar del Este se utiliza en varios (aunque en menor después del 8 de marzo de cuando comenzó Hora de verano)).

    String date = "2020-03-12T01:23:45.678+0000";

    System.out.println("This is the string:      " + date); 

    DateTime dt = new DateTime(date);
    DateTime dt2 = new DateTime(dt).toDateTime(DateTimeZone.getDefault());

    System.out.println("This is the first time:  " + dt); 
    System.out.println("This is the second time: " + dt2); 

La salida es:

This is the string:      2020-03-12T01:23:45.678+0000
This is the first time:  2020-03-11T20:23:45.678-05:00
This is the second time: 2020-03-11T20:23:45.678-05:00

Compare las dos primeras líneas y el aviso de que la conversión a UTC a EST ya ha sucedido al analizar la cadena.

Como acotación al margen, ya que la cadena está en formato ISO 8601, que no necesita especificar cualquier formateador para analizarlo. El DateTime(Object)constructor acepta. Pero la misma conversión sucedió en su análisis.

Lo que sucedió en su código?

Repitiendo la cita del comentario de Andreas:

Si la withOffsetParsed()ha llamado, entonces el DateTime resultante tendrá un desplazamiento fijo basado en la zona horaria analizada. De lo contrario el DateTime resultante tendrá la zona de este formateador, pero la zona analizada puede haber causado el tiempo para ser ajustado.

Por lo que su formateador tiene la zona predeterminada momento de su dispositivo, y por lo tanto también el DateTimeobjeto que se obtiene a partir de análisis.

Así que cuando se crea dt2estabas convirtiendo de Eastern Standard Time a Eastern Standard Time y por lo tanto tiene la misma fecha y hora de nuevo.

Enlace: Documentación deDateTimeFormatter.parseDateTime()

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=278759&siteId=1
Recomendado
Clasificación