如何使用默认时区偏移将 Java ZonedDateTime 转换为 OffsetDateTime?

How can I convert Java ZonedDateTime to OffsetDateTime with default time zone offset?

假设我有一个 2018-10-30T18:04:58.874Z 的 ZonedDateTime: 如何将其转换为 OffsetDateTime 2018-10-30T13:04:58.874-05:00

我希望偏移量是 default/system 偏移量,例如从 OffsetDateTime.now().

中提取

从你的 ZonedDateTime 你需要指定你想要你的 OffsetDateTime 的其他区域,精确区域和他们使用 .toOffsetDateTime() :

ZonedDateTime z = ZonedDateTime.parse("2018-10-30T18:04:58.874Z");
System.out.println(z); //2018-10-30T18:04:58.874Z

OffsetDateTime o = z.withZoneSameInstant(ZoneId.of("UTC-5")).toOffsetDateTime();
System.out.println(o); //2018-10-30T13:04:58.874-05:00

这将使时区从 current/now:

someOffsetDateTime.withOffsetSameInstant(OffsetDateTime.now().getOffset())

我认为正确的做法是:

ZonedDateTime date = ZonedDateTime.parse("2018-10-30T18:04:58.874Z");
ZoneOffset offset = ZoneId.systemDefault().getRules().getOffset(date.toInstant());
ZonedDateTime dateInMyZone = date.withZoneSameInstant(offset)

从现在开始获取它() 可能会给您一个错误的结果,因为由于 DST

,偏移量可能会在一年中发生变化