java8;如何使用java.util.Date的(值)设置java.time.LocalDate

时间:2014-03-19 14:50:41

标签: java datepicker java-8 java-time

我使用java8 DatePicker(我喜欢它)。

此课程使用java.time.LocalDate。 另一方面,Persistence使用(仅限2014年3月)java.util.DateLocalDate2Date涉及但可行(见下文) 但我找不到办法做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());

我看到了答案    新的LocalDate(日期); 和变体,但这些不起作用;

最近的努力是转换' 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

我迷失了

2 个答案:

答案 0 :(得分:2)

使用:

public LocalDate dateToLocalDate(final Date date)
{
    return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault())
        .toLocalDate();
}

但是,如上所述,此时没有时区信息。

javadoc说这个方法:

  

从Instant和区域ID中获取LocalDateTime的实例。

     

这将根据指定的时刻创建本地日期时间。首先,使用区域ID和瞬间获得UTC /格林威治的偏移量,这很简单,因为每个瞬间只有一个有效偏移量。然后,使用instant和offset来计算本地日期时间。

答案 1 :(得分:0)

您也可以将您的时区传递为 -

LocalDateTime localDateTime = LocalDateTime.from(new Date().toInstant().atZone(ZoneId.of("UTC")));