【发布时间】:2015-11-07 05:12:39
【问题描述】:
我是 java.time 包的新手。我有一个 LocalDate 2015-12-10。我需要将其转换为 ZonedDateTime。时间应为 00:00:00,区域为 ZoneOffset.UTC。
转换后 ZonedDateTime 应该是 2015-12-10T00:00:00+02:00。
我将 LocalDate 存储在一个名为 startDate 的变量中。
我试过了:
ZonedDateTime.ofInstant(Instant.from(startDate), ZoneOffset.UTC)
但得到错误
java.time.DateTimeException: 无法从 TemporalAccessor 获取 Instant: 2015-12-10 of type java.time.LocalDate]
我也试过了:
startDate.atStartOfDay().atZone(ZoneOffset.UTC)
这会产生意想不到的结果。
我查看了 API 并尝试了其他一些方法,但到目前为止都没有运气。
有没有其他方法可以将 LocalDate 转换为 ZonedDateTime?
【问题讨论】:
-
您为什么希望区域偏移为 +02:00?
-
如果你想要一个 ZonedDateTime,你需要一个 ZoneId。不仅仅是一个 ZoneOffset。而且你的问题没有多大意义。首先你说你想要它在 UTC 时区,然后你说它应该是 2015-12-10T00:00:00+02:00。如果是 +02:00,则不是 UTC。 UTC 为 +00:00。如果您想要的是具有固定 UTC 偏移量的日期时间,则应使用 OffsetDateTime:
OffsetDateTime offsetDateTimeDateTime = date.atStartOfDay().atOffset(ZoneOffset.ofHours(2)); -
我很抱歉:ZoneOffset 扩展了 ZoneId,所以这将返回一个 ZonedDateTime。不过,我的其余评论仍然有效。