Qual é a diferença entre estas duas maneiras de criar um DateTime de um LocalDateTime?

Binney:

Nossos usos aplicação JodaTime aos tempos do punho, e (por razões de formatação API) armazenamos vezes em uma classe de modelo que se parece um pouco como este:

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
}

Além disso, eu jusante notado que iríamos conseguir um tempo diferente para fora do que estavam assentados. Achei que foram converter os campos de volta a uma errada DateTime, desde os campos locais parecem ter os valores corretos.

Por um capricho eu tentei mudar o getter e agora ele funciona, mas eu não tenho idéia porque:

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

A documentação joda é um pouco de boca fechada sobre como ele realiza a toDateTime()chamada; ele diz que "usos" um determinado fuso horário de alguma forma, mas é isso.

Alguém pode me explicar o que é a diferença entre

return localStopTime.toDateTime(timeZone);

e

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

?

Desde já, obrigado!

Edit: Eu descobri-lo - eu estava usando "Etc / GMT" como o meu fuso horário e que não levou em conta poupança da luz do dia. Marcaram a resposta de Marco como correta

Marco Marchetti:

A diferença entre os dois é o próximo, você usa withZone()a: (como JavaDocs diz)

Retorna uma cópia desta data e hora com um fuso horário diferente, preservando o instante milissegundo.

Além disso, o JavaDocs fornece um bom exemplo:

Este método é útil para encontrar a hora local em outro fuso horário. Por exemplo, se neste instante detém 12:30 Europe / London, o resultado deste método com a Europa / Paris seria 13h30.

E você usar o toDateTime(timeZone)para retornar um DateTimeobjeto mas aplicando o especificado timeZonea ele.

Assim, você pode usar toDateTime(timeZone).withZone(secondTimeZone)e você receberá uma cópia do DateTimegerado pela primeira declaração ( toDateTime(timeZone)), mas, com um fuso horário diferente, perseving o instante milisecond. E se você usar toDateTime()sem parâmetros, só vai recuperar um DateTimeobjeto.

Acho que você gosta

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