将本地时间 (Java 8) 转换为日期

Convert LocalTime (Java 8) to Date

我正在尝试将 java.time.LocalTime 对象转换为 java.util.Date,但找不到任何合适的方法。正确的做法是什么?

为什么 java 似乎没有附带内置的直接转换方法?

可能重复:
How to convert joda time - 对我不起作用,可能我缺少一些 "joda" 库?
- 这解决了相反的转换问题。

LocalTime lt = ...;
Instant instant = lt.atDate(LocalDate.of(A_YEAR, A_MONTH, A_DAY)).
        atZone(ZoneId.systemDefault()).toInstant();
Date time = Date.from(instant);

发件人: http://blog.progs.be/542/date-to-java-time

LocalTime 实际上不能转换为Date,因为它只包含DateTime 的time 部分。喜欢11:00。但不知道哪一天。您必须手动提供它:

LocalTime lt = ...;
Instant instant = lt.atDate(LocalDate.of(A_YEAR, A_MONTH, A_DAY)).
        atZone(ZoneId.systemDefault()).toInstant();
Date time = Date.from(instant);

这是一个博客 post,explains all the conversions 介于新旧 API 之间。

没有简单的内置转换方法,因为这些 API 以完全不同的方式处理日期和时间。

我把数据(小时、分钟、秒)一个一个添加(从当地时间到日期):

reta.setHours(vol.getRetard().getHour());
reta.setMinutes(vol.getRetard().getMinute());
reta.setSeconds(vol.getRetard().getSecond());

注: reta: 可验证日期; vol.getRetard(): 本地时间变量

这是另一种方法:

我们可以将 LocalDate 添加到 LocalTime 以使其成为 LocalDateTime,然后使用 java.sql.Timestamp 的 valueOf 方法将其转换为 Date,如下所示:

LocalTime localTime = LocalTime.now();
Date date = java.sql.Timestamp.valueOf(localTime.atDate(LocalDate.now()));

正如其他人所说,这是一个有问题的问题,因为 LocalTimeDate 确实代表了完全不同且几乎不相关的概念。 LocalTime 是一天中没有时区的时间,例如 19:45(或 7:45 下午)。 ADate是时间线上的一个点;如果它恰好在某个时区的某个日期与 19:45 重合,则不会在其他时区。

我认为滥用(实际上)Date 一天中一个小时的传统方法是将其设置为 JVM 默认时区中 1970 年 1 月 1 日的那个时间。这种做法承担了已经提到的所有责任。特别是 JVM 默认时区设置可以随时从程序的另一部分或同一 JVM 中的任何其他程序 运行 更改。这意味着一个完全不相关的程序可能会突然导致您的 Date 指示与您初始化的时间不同的一天中的时间。

我们无能为力,所以这里是:

    LocalTime time = LocalTime.of(11, 0);

    Instant timeOnEpochDayInDefaultTimeZone = LocalDate.EPOCH
            .atTime(time)
            .atZone(ZoneId.systemDefault())
            .toInstant();
    Date oldfashionedDateObject = Date.from(timeOnEpochDayInDefaultTimeZone);

    System.out.println(oldfashionedDateObject);

在我所在的时区,这段代码的输出是:

Thu Jan 01 11:00:00 CET 1970