¿Cuál es la diferencia entre estas dos formas de crear un DateTime de una LocalDateTime?

Binney:

Nuestros usos de aplicación JodaTime al tiempo de manejo, y (por razones de API formateo) almacenamos veces en una clase de modelo que se parece un poco como esto:

class Event {
    private LocalDateTime localTime;
    private DateTimeZone timeZone;

    public DateTime getTime() {
        return localStopTime.toDateTime(timeZone);
    }

    public void setTime(DateTime value) {
        this.localTime = value.toLocalDateTime();
        this.timeZone = value.getZone();
    }
    // ...more boilerplate
}

Además me di cuenta corriente abajo nos iban a dar una hora diferente fuera que estábamos preparando. Supuse que estábamos convirtiendo los campos de nuevo a un mal DateTime, ya que los campos locales parecen tener los valores correctos.

En un capricho He intentado cambiar el captador y ahora funciona, pero no tengo ni idea de por qué:

    public DateTime getTime() {
        return localStopTime.toDateTime().withZone(timeZone);
    }

La documentación joda es un poco hermético sobre cómo se lleva a cabo la toDateTime()llamada; Dice que "usos" una cierta zona horaria de alguna manera, pero eso es todo.

¿Puede alguien me explique cuál es la diferencia entre

return localStopTime.toDateTime(timeZone);

y

return localStopTime.toDateTime().withZone(timeZone);

?

¡Gracias por adelantado!

Editar: He lo descubrió - yo estaba usando "Etc / GMT" como mi zona horaria y que no tuvo en cuenta el ahorro de luz diurna. Han marcado la respuesta de Marco como correcta

Marco Marchetti:

La diferencia entre los dos es la siguiente, se utiliza withZone()para: (a JavaDocs dice)

Devuelve una copia de esta fecha y hora con una zona horaria diferente, conservando el instante milisegundo.

Además, el JavaDocs ofrece un buen ejemplo:

Este método es útil para encontrar la hora local en otra zona horaria. Por ejemplo, si en este instante sostiene 12:30 en Europa / Londres, el resultado de este método con Europa / París sería 13:30.

Y se utiliza el toDateTime(timeZone)para regresar un DateTimeobjeto, sino la aplicación de los especificados timeZonea ella.

Por lo tanto, se puede utilizar toDateTime(timeZone).withZone(secondTimeZone)y obtendrá una copia de la DateTimegenerada por la primera instrucción ( toDateTime(timeZone)) pero, con una zona horaria diferente, perseving el instante milisegundo. Y si se utiliza toDateTime()sin parámetros, sólo se va a recuperar un DateTimeobjeto.

Supongo que te gusta

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