【问题标题】:Java 8 - Convert LocalDate to ZonedDateTimeJava 8 - 将 LocalDate 转换为 ZonedDateTime
【发布时间】: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。不过,我的其余评论仍然有效。

标签: java java-8 java-time


【解决方案1】:

我认为这个问题不再相关,但出于谷歌目的:

  LocalDate localDate = LocalDate.parse("2017-07-22");      
  ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault());
  // => 2017-07-22T00:00+05:30[Asia/Kolkata]

来源 https://beginnersbook.com/2017/10/java-convert-localdate-to-zoneddatetime/

【讨论】:

    【解决方案2】:

    将不太具体的对象转换为更具体的对象时,请使用“at”方法:

    ZonedDateTime zdt = startDate.atStartOfDay(ZoneOffset.UTC);
    

    但是,传入 UTC 偏移量不会得到 +02:00 的结果,这表明您正在尝试实现其他目标。

    【讨论】:

      猜你喜欢
      • 2018-12-24
      • 2019-01-21
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      • 2015-05-23
      • 2019-07-22
      相关资源
      最近更新 更多