[英]How to set java.time.LocalDate using (the value of) an java.util.Date?
我使用 Java 8 DatePicker(我喜歡它)。
這個類使用java.time.LocalDate
。 另一方面, Persistence
使用(僅在 2014 年 3 月) java.util.Date
。 LocalDate2Date
涉及但可行(見下文),但我找不到做 Date2LocalDate 的方法。
....
entityClassFromDatabase.setDate2b(LocalDate2Date(datepicker.getvalue()));
....
}
private java.util.Date LocalDate2Date(LocalDate localDate) {
[validation code omitted]
ChronoLocalDateTime cldt = localDate.atStartofDay();
Instant instant = cldt.toInstant(ZoneOffset.from(Instant.now().atZone(ZoneId.systemDefault())));
return Date.from.(instant);
}
我需要的是類似的東西;
datepicker.setvalue(Date2LocalDate(entityClassFromDatabase.getDate2b());
我看到了建議 new LocalDate(date); 的答案。 和變體,但這些不起作用;
最新的努力是via java.time.Instant
進行“轉換” via java.time.Instant
但盡管LocalDate2Date
使用的“即時”打印出與下面使用的即時相同:
Instant instant = entityClassFromDatabase.getDate2b.toinstant();
LocalDateTime xx = LocalDateTime.from(instant);
拋出異常如下:
java.time.DateTimeException: Unable to obtain LocalDateTime from TemporalAccessor: 2014-03-27T23:00:00Z of type java.time.Instant
我迷路了
用:
public LocalDate dateToLocalDate(final Date date)
{
return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault())
.toLocalDate();
}
但是,如前所述,這不再有時區信息。
javadoc 說這個方法:
從 Instant 和區域 ID 獲取 LocalDateTime 的實例。
這會根據指定的時刻創建本地日期時間。 首先,使用區域 ID 和時刻獲得 UTC/格林威治的偏移量,這很簡單,因為每個時刻只有一個有效偏移量。 然后,使用時刻和偏移量來計算本地日期時間。
您還可以傳入您的時區作為 -
LocalDateTime localDateTime = LocalDateTime.from(new Date().toInstant().atZone(ZoneId.of("UTC")));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.