Java 8-将LocalDate转换为ZonedDateTime



我是java.time包的新手。我有一个当地日期2015-12-10。我需要将其转换为ZonedDateTime。时间应为00:00:00,Zone为ZoneOffset。UTC。

转换后,ZonedDateTime应为2015-12-10T00:00+02:00。

我将LocalDate存储在一个名为startDate的变量中。

我试过了:

ZonedDateTime.ofInstant(Instant.from(startDate), ZoneOffset.UTC)

但是得到错误

java.time.DateTimeException:无法从类型为java.time.LocalDate]的TemporalAccessor:2015-12-10获取Instant

我也试过:

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

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

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

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

将不太特定的对象转换为更特定的对象时,请使用"at"方法:

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

然而,通过UTC偏移不会得到+02:00的结果,这表明你正在努力实现其他目标。

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

  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/

如果您需要将LocalDate转换为当前时间的ZonedDateTime,您可以使用以下选项:

LocalDate localDate = LocalDate.parse("2017-07-22"); 
LocalDateTime localDateTime = localDate.atTime(LocalTime.now());
ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault())
public ZonedDateTime transformToZonedDateTime(String Date, String timeZone) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
    LocalDate localDate = LocalDate.parse(Date, formatter);
    LocalDateTime localDateTime = localDate.atTime(LocalTime.now());
    ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneOffset.UTC);
    ZoneId zoneId = ZoneId.of(timeZone);
    return zonedDateTime.withZoneSameInstant(zoneId);
}

INPUT:deliveryDate=";18-05-2023";并且时区=";亚洲/香港;

返回:";2023-05-19T20:43Z";

最新更新