这两种从 LocalDateTime 创建 DateTime 的方法有什么区别?
What's the difference between these two ways of creating a DateTime from a LocalDateTime?
我们的应用程序使用 jodatime 来处理时间,并且(出于 API 格式化原因)我们将时间存储在模型 class 中,看起来有点像这样:
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,因为本地字段似乎具有正确的值。
一时兴起,我尝试更改 getter,现在可以了,但我不知道为什么:
public DateTime getTime() {
return localStopTime.toDateTime().withZone(timeZone);
}
joda documentation 对于如何执行 toDateTime()
调用有点守口如瓶;它说 "uses" 某个时区,但就是这样。
谁能给我解释一下
之间的区别
return localStopTime.toDateTime(timeZone);
和
return localStopTime.toDateTime().withZone(timeZone);
?
提前致谢!
编辑:我已经弄明白了 - 我使用 "Etc/GMT" 作为我的时区并且没有考虑夏令时。已将 Marco 的回答标记为正确
两者的区别在于下一个,您使用 withZone()
来:(如 JavaDocs 所说)
Returns a copy of this datetime with a different time zone, preserving the millisecond instant.
另外,JavaDocs 提供了一个很好的例子:
This method is useful for finding the local time in another timezone.
For example, if this instant holds 12:30 in Europe/London, the result
from this method with Europe/Paris would be 13:30.
并且您使用 toDateTime(timeZone)
到 return 一个 DateTime
对象,但将指定的 timeZone
应用于它。
因此,您可以使用 toDateTime(timeZone).withZone(secondTimeZone)
,您将获得第一个语句 (toDateTime(timeZone)
) 生成的 DateTime
的副本,但是,在不同的时区,坚持毫秒瞬间。如果您使用不带参数的 toDateTime()
,将只会检索一个 DateTime
对象。
我们的应用程序使用 jodatime 来处理时间,并且(出于 API 格式化原因)我们将时间存储在模型 class 中,看起来有点像这样:
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,因为本地字段似乎具有正确的值。
一时兴起,我尝试更改 getter,现在可以了,但我不知道为什么:
public DateTime getTime() {
return localStopTime.toDateTime().withZone(timeZone);
}
joda documentation 对于如何执行 toDateTime()
调用有点守口如瓶;它说 "uses" 某个时区,但就是这样。
谁能给我解释一下
之间的区别return localStopTime.toDateTime(timeZone);
和
return localStopTime.toDateTime().withZone(timeZone);
?
提前致谢!
编辑:我已经弄明白了 - 我使用 "Etc/GMT" 作为我的时区并且没有考虑夏令时。已将 Marco 的回答标记为正确
两者的区别在于下一个,您使用 withZone()
来:(如 JavaDocs 所说)
Returns a copy of this datetime with a different time zone, preserving the millisecond instant.
另外,JavaDocs 提供了一个很好的例子:
This method is useful for finding the local time in another timezone. For example, if this instant holds 12:30 in Europe/London, the result from this method with Europe/Paris would be 13:30.
并且您使用 toDateTime(timeZone)
到 return 一个 DateTime
对象,但将指定的 timeZone
应用于它。
因此,您可以使用 toDateTime(timeZone).withZone(secondTimeZone)
,您将获得第一个语句 (toDateTime(timeZone)
) 生成的 DateTime
的副本,但是,在不同的时区,坚持毫秒瞬间。如果您使用不带参数的 toDateTime()
,将只会检索一个 DateTime
对象。