OffsetDateTime.now()在Android中的奇怪行为



如果我在一个普通的Java程序中这样做:

OffsetDateTime offsetDateTime = OffsetDateTime.now();

那么我的输出为20200-04-01T20:22:04.604+02:00

如果我在安卓系统上也这样做,那么我会得到输出22020-04-01T18:22:04.604Z

同时格式化为local_time:

String format = DateTimeFormatter.ISO_LOCAL_TIME.format(now);

输出为18:22:04.604

但我想要从现在((开始我的本地DateTime220.22,而不是UTC时间。

安卓系统的时区是欧洲夏季+02:00。

这是怎么回事?

最安全的方法是将您想要的时区传递给now方法:

OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneId.of("Europe/Vienna"));
System.out.println(offsetDateTime);

我刚才运行时的输出:

2020-04-04T09:02:05.059927+02:00

明确地给出时区使我们摆脱了对JVM默认时区的依赖。

如果我正确理解您的问题,JVM时区设置并没有反映您设备的时区设置。两者可能有所不同,但我不知道你的情况是如何发生的。可能的解释包括:

  • 启动JVM时,user.timeaone的设置等于UTC
  • 通过设置上述系统属性或调用TimeZone.setDefault(),在程序或同一JVM中运行的另一个程序中的某个位置将时区设置为UTC

最新更新