将LocalTime(Java 8)转换为Date

时间:2015-10-13 09:11:31

标签: java date java-8 java-time

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

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

可能重复:
How to convert joda time - 对我不起作用,可能是我错过了一些" joda"库?
How to convert Date to LocalTime? - 这反过来说明转换。

5 个答案:

答案 0 :(得分:17)

LocalTime实际上无法转换为Date,因为它只包含DateTime的 time 部分。喜欢11点。但没有一天知道。你必须手动提供它:

error: RequestError: Validation failed for parameter 'erreichbar_von'. Invalid time.

以下是新旧API之间explains all the conversions的博文。

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

我一次(从本地时间至今)添加了数据(时,分,秒):

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

注意: reta:日期小点; vol.getRetard():本地时间变量

答案 3 :(得分:2)

正如其他人所说,这是一个有问题的问题,因为LocalTimeDate实际上代表着完全不同且几乎不相关的概念。 LocalTime是一天中没有时区的时间,例如19:45(或7:45 PM)。 Date是时间线上的一个点;如果它恰好在某个时区的某个日期与19:45一致,那么它将不在其他时区。

我相信,将Date误用(实际上)为一天的一个小时的传统方式是将其设置为1970年1月1日的JVM默认时区中的一天中的那个时间。这种做法承担了已经提到的所有债务。特别是,可以随时从程序的另一部分或在同一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);

在我的时区中,此代码段的输出是:

1970年1月1日星期四11:00:00

答案 4 :(得分:0)

这是另一种方法:

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

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