2

我使用 Java 8 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());

我已经看到建议 new LocalDate(date); 的答案。和变体,但这些不起作用;

最新的努力是“转换” 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

我迷路了

4

2 回答 2

2

利用:

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

但是,如前所述,这不再有时区信息。

javadoc 谈到了这种方法:

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

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

于 2014-03-19T15:06:30.973 回答
0

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

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

于 2014-10-24T18:44:30.557 回答