设置 LocalTime joda
Set LocalTime joda
如何从 joda 设置 LocalTime
中所需的时区?所需时区 - 莫斯科。
默认构造函数 new LocalTime()
为我显示其他时间:它显示时间,比我的时区提前一小时。
A LocalTime
没有 时区。这就是它的全部意义。
如果您想要在特定时区的特定时刻的 LocalTime
,您可以使用 DateTime
然后 toLocalTime
:
DateTime now = new DateTime(zone); // Urgh: see below
LocalTime localNow = now.toLocalTime();
请注意,我强烈建议使用表示时钟的依赖项来提供 "the current instant" - 然后您可以使用 "system" 实现通过 System.currentTimeMillis
等返回当前时间,但您可以也使用"testing"实现返回预定义的时间,允许您在任何时间编写单元测试。
有了这样的依赖,你可能会有这样的东西:
DateTime now = new DateTime(clock.getCurrentInstant(), zone);
LocalTime localNow = now.toLocalTime();
Jon Skeets 关于可注射时钟的建议非常好。否则 - 更接近你的问题 - 你应该使用 LocalTime
的 alternative constructor 接受 DateTimeZone
参数,以便不依赖你的系统时区,这可能不是你想要的:
LocalTime time = new LocalTime(DateTimeZone.forID("Europe/Moscow"));
它是如何工作的?
首先 Joda-Time 通过 System.currentTimeMillis()
使用标准系统时钟并获得全局时间戳。为了导出本地时间部分,Joda-Time 必须知道时区参考。这就是你在这里定义的。该区域仅用于转换,没有别的。在构建新的本地时间(没有关于时区的内部知识)之后,Joda-Time 不再需要记录的时区参考。
更新:
如果您的系统时区已经是 "Europe/Moscow"(没有参数的构造函数使用系统时区!),您应该检查您的 Joda-Time 版本。也许您有包含旧 dst 规则的过时时区数据。下载最新版本 v2.8 可能会帮助解决旧数据。
如何从 joda 设置 LocalTime
中所需的时区?所需时区 - 莫斯科。
默认构造函数 new LocalTime()
为我显示其他时间:它显示时间,比我的时区提前一小时。
A LocalTime
没有 时区。这就是它的全部意义。
如果您想要在特定时区的特定时刻的 LocalTime
,您可以使用 DateTime
然后 toLocalTime
:
DateTime now = new DateTime(zone); // Urgh: see below
LocalTime localNow = now.toLocalTime();
请注意,我强烈建议使用表示时钟的依赖项来提供 "the current instant" - 然后您可以使用 "system" 实现通过 System.currentTimeMillis
等返回当前时间,但您可以也使用"testing"实现返回预定义的时间,允许您在任何时间编写单元测试。
有了这样的依赖,你可能会有这样的东西:
DateTime now = new DateTime(clock.getCurrentInstant(), zone);
LocalTime localNow = now.toLocalTime();
Jon Skeets 关于可注射时钟的建议非常好。否则 - 更接近你的问题 - 你应该使用 LocalTime
的 alternative constructor 接受 DateTimeZone
参数,以便不依赖你的系统时区,这可能不是你想要的:
LocalTime time = new LocalTime(DateTimeZone.forID("Europe/Moscow"));
它是如何工作的?
首先 Joda-Time 通过 System.currentTimeMillis()
使用标准系统时钟并获得全局时间戳。为了导出本地时间部分,Joda-Time 必须知道时区参考。这就是你在这里定义的。该区域仅用于转换,没有别的。在构建新的本地时间(没有关于时区的内部知识)之后,Joda-Time 不再需要记录的时区参考。
更新:
如果您的系统时区已经是 "Europe/Moscow"(没有参数的构造函数使用系统时区!),您应该检查您的 Joda-Time 版本。也许您有包含旧 dst 规则的过时时区数据。下载最新版本 v2.8 可能会帮助解决旧数据。