Android中OffsetDateTime.now()的异常行为

如果我在一般的Java程序中这样做:

OffsetDateTime offsetDateTime = OffsetDateTime.now();

然后我的输出为 2020-04-01T20:22:04.604 + 02:00

如果我在Android上执行相同操作,则输出为 2020-04-01T18:22:04.604Z

格式设置为local_time:

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

输出为 18:22:04.604

但是我要从现在开始()我的本地DateTime 20.22 ,而不是UTC时间。

Android中的系统时区为“欧洲夏令时+02:00”。

这是怎么回事?

kkkkkwwwpopo 回答:Android中OffsetDateTime.now()的异常行为

最安全的方法是将所需的时区传递给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。
本文链接:https://www.f2er.com/2533120.html

大家都在问