这两种从LocalDateTime创建DateTime的方法有什么区别?

问题描述 投票:3回答:1

我们的应用程序使用jodatime来处理时间,并且(出于API格式化原因)我们将时间存储在模型类中,看起来有点像这样:

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
}

在下游,我注意到我们得到的时间不同于我们设置的时间。我想我们将字段转换回DateTime错误,因为本地字段似乎具有正确的值。

我一时兴起尝试改变吸气剂,现在它可以工作,但我不明白为什么:

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

joda documentation对于如何执行toDateTime()电话有点守口如瓶;它说它以某种方式“使用”某个时区,但就是这样。

任何人都可以向我解释有什么区别

return localStopTime.toDateTime(timeZone);

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

?

提前致谢!

编辑:我已经弄明白 - 我使用“Etc / GMT”作为我的时区,并没有考虑到夏令时。将Marco的答案标记为正确

java time timezone jodatime
1个回答
0
投票

这两者之间的区别是下一个,你使用withZone() :(如JavaDocs所说)

返回具有不同时区的此日期时间的副本,保留毫秒时刻。

此外,JavaDocs提供了一个很好的例子:

此方法对于在另一个时区中查找本地时间非常有用。例如,如果此时刻在欧洲/伦敦持续12:30,则此方法与欧洲/巴黎的结果将是13:30。

你使用toDateTime(timeZone)返回一个DateTime对象,但应用指定的timeZone

所以,你可以使用toDateTime(timeZone).withZone(secondTimeZone),你将得到第一个语句(DateTime)生成的toDateTime(timeZone)的副本,但是,使用不同的时区,迫害毫秒瞬间。如果你使用没有参数的toDateTime(),只会检索一个DateTime对象。

© www.soinside.com 2019 - 2024. All rights reserved.