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

问题描述 投票:0回答:1

如果我在一般的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

但是我想从now()开始我的本地DateTime

20.22

,而不是UTC时间。Android中的系统时区为欧洲夏令时+02:00。

这里发生了什么?

java android datetimeoffset
1个回答
0
投票
最安全的方法是将所需的时区传递给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。>
© www.soinside.com 2019 - 2024. All rights reserved.