我尝试将java.time.LocalTime
对象转换为java.util.Date
但无法找到任何合适的方法。这样做的正确方法是什么?
有没有理由为什么java似乎没有附带内置的直接转换方法?
可能重复:
How to convert joda time - 对我不起作用,可能是我错过了一些" joda"库?
How to convert Date to LocalTime? - 这反过来说明转换。
答案 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);
答案 2 :(得分:2)
我一次(从本地时间至今)添加了数据(时,分,秒):
reta.setHours(vol.getRetard().getHour());
reta.setMinutes(vol.getRetard().getMinute());
reta.setSeconds(vol.getRetard().getSecond());
注意: reta:日期小点; vol.getRetard():本地时间变量
答案 3 :(得分:2)
正如其他人所说,这是一个有问题的问题,因为LocalTime
和Date
实际上代表着完全不同且几乎不相关的概念。 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()));