【发布时间】:2018-10-30 19:35:48
【问题描述】:
假设我的 ZonedDateTime 为 2018-10-30T18:04:58.874Z :
如何将其转换为 OffsetDateTime 2018-10-30T13:04:58.874-05:00
我希望偏移量是默认/系统偏移量,例如从OffsetDateTime.now() 中提取。
【问题讨论】:
-
你认为
ZonedDateTime的哪些方法在这里有用?
假设我的 ZonedDateTime 为 2018-10-30T18:04:58.874Z :
如何将其转换为 OffsetDateTime 2018-10-30T13:04:58.874-05:00
我希望偏移量是默认/系统偏移量,例如从OffsetDateTime.now() 中提取。
【问题讨论】:
ZonedDateTime的哪些方法在这里有用?
从您的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
【讨论】:
这会将时区从当前/现在转移:
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)
从 now() 获取它会给你一个可能错误的结果,因为偏移量可能会因 DST 而在一年中发生变化
【讨论】: