繁体   English   中英

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

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

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

我希望偏移量是默认/系统偏移量,例如从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

这会将时区从当前/现在转移:

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() 获取它会给你一个可能错误的结果,因为由于夏令时,偏移量可能会在一年中发生变化

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM