这两种从本地日期时间创建日期时间的方法有什么区别?



我们的应用程序使用 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
}

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

一时兴起,我尝试更改吸气器,现在它可以工作了,但我不知道为什么:

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

joda文档对它如何执行toDateTime()调用有点守口如瓶;它说它以某种方式"使用"某个时区,但仅此而已。

谁能向我解释一下两者之间的区别是什么

return localStopTime.toDateTime(timeZone);

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

提前感谢!

编辑:我已经想通了 - 我使用"Etc/GMT"作为我的时区,这没有考虑到夏令时。已将马可的答案标记为正确

这两者之间的区别是下一个,您可以使用withZone()来: (正如JavaDocs所说(

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

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

此方法可用于查找另一个时区的本地时间。 例如,如果此时刻在欧洲/伦敦保持 12:30,则结果 从这种方法到欧洲/巴黎将是13:30。

然后,您可以使用toDateTime(timeZone)返回DateTime对象,但对其应用指定的timeZone

因此,您可以使用toDateTime(timeZone).withZone(secondTimeZone),您将获得第一个语句( toDateTime(timeZone) (生成的DateTime的副本,但是,使用不同的时区,会持续毫秒的时刻。如果你使用不带参数的toDateTime(),只会检索一个DateTime对象。

相关内容

  • 没有找到相关文章