如何从joda设置LocalTime中所需的时区?规定的时区-莫斯科。默认构造函数new LocalTime()为我显示其他时间:它显示时间,比我的时区提前一个小时。
发布于 2015-06-11 17:17:59
乔恩·斯基茨( Jon )对注射式时钟的建议是好的。否则--而且更接近您的问题--您应该使用替代构造函数 of LocalTime来接受DateTimeZone-argument,以避免依赖您的系统时区,这可能不是您想要的:
LocalTime time = new LocalTime(DateTimeZone.forID("Europe/Moscow"));它是如何工作的?
首先,Joda-Time通过System.currentTimeMillis()使用标准的系统时钟,并获得一个全局时间戳。为了导出本地时间部分,Joda-时间必须知道一个时区引用。这就是你在这里定义的。此区域仅用于转换,没有其他用途。在构建了新的本地时间之后(该时间没有关于时区的内部知识),Joda-Time不再需要文档中的区域引用。
更新:
如果您的系统时区已经是“欧洲/莫斯科”(没有args的构造函数使用系统tz!)你应该检查一下你的Joda-Time版本。也许您有过时的时区数据,其中包含旧的dst规则。下载最新版本的v2.8可能有助于对抗旧数据。
发布于 2015-06-11 16:38:45
LocalTime没有时区。这就是重点所在。
如果您希望在特定时区的特定时刻使用LocalTime,则可以使用DateTime,然后使用toLocalTime。
DateTime now = new DateTime(zone); // Urgh: see below
LocalTime localNow = now.toLocalTime();请注意,我强烈建议使用表示时钟的依赖项来提供“当前瞬间”--然后可以使用"system“实现通过System.currentTimeMillis等返回当前时间,但也可以使用返回预定义时间的”测试“实现,允许您随时编写单元测试。
有了这样的依赖,您可能会有这样的情况:
DateTime now = new DateTime(clock.getCurrentInstant(), zone);
LocalTime localNow = now.toLocalTime();https://stackoverflow.com/questions/30786479
复制相似问题