Java 8 - 将LocalDate转换为ZonedDateTime

时间:2015-08-14 03:14:59

标签: java java-8 java-time

我是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类型为java.time.LocalDate]

我也尝试过:

startDate.atStartOfDay().atZone(ZoneOffset.UTC)

这会产生意想不到的结果。

我查看了API并尝试了其他一些方法,但到目前为止还没有运气。

还有其他方法可以将LocalDate转换为ZonedDateTime吗?

2 个答案:

答案 0 :(得分:33)

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

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

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

答案 1 :(得分:1)

我认为这个问题已经不相关了,只是出于Google目的:

  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/