我想将 java.time.LocalDate
转换为 java.util.Date
类型。因为我需要将日期设置到 JDateChooser
中。或者有没有支持java.time
日期的日期选择器?
我想将 java.time.LocalDate
转换为 java.util.Date
类型。因为我需要将日期设置到 JDateChooser
中。或者有没有支持java.time
日期的日期选择器?
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
这假定你的日期选择器使用系统默认时区将日期转换为字符串。
atStartOfDay()
函数,因为据我了解它会改变日期的值。 - yegor256这是一种我用来将较新的 java.time
类转换为 java.util.Date
对象以及反过来的实用工具类:
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
public class DateUtils {
public static Date asDate(LocalDate localDate) {
return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
}
public static Date asDate(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
public static LocalDate asLocalDate(Date date) {
return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();
}
public static LocalDateTime asLocalDateTime(Date date) {
return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
}
}
根据@Oliv的评论进行了编辑。
ZoneId.systemDefault()
不是有问题吗?因为时区在一年中会发生变化。例如,如果在1月1日我处于时区-05:00(中央时区),但是在7月1日我处于时区-06:00(中央夏令时),那么由于夏令时的原因,这样做不会导致不准确的结果吗? - jhilden免责声明: 仅用于说明现有的Java API。不应在生产代码中使用。
您可以使用java.sql.Date.valueOf()
方法,如下所示:
Date date = java.sql.Date.valueOf(localDate);
无需在此处添加时间和时区信息,因为它们被隐式地采取。
请参见LocalDate to java.util.Date and vice versa simplest conversion?
java.sql.Date
是用于数据库层、JDBC 和 JPA 的。Web 层(或任何客户端应用程序)应完全不依赖于 java.sql.*
。 - Tinyjava.sql.Date
就是 java.util.Date
,只不过时间被设置为 00:00:00
。但从设计角度来看,java.sql.*
不适用于客户端交互的前端层,例如 Servlets / JSP。在 Java 端使用 java.util.Date
,在 JDBC 端使用 java.sql.Timestamp
或其他适用的类。 - Tinyjava.time库中有Temporal接口,你可以使用它从大多数时间类中创建Instant对象。Instant表示Epoch时间轴上的毫秒数,这是其他所有日期和时间的基准参考。
我们需要将Date转换为一个带有时间和时区信息的ZonedDateTime对象以进行转换:
LocalDate ldate = ...;
Instant instant = Instant.from(ldate.atStartOfDay(ZoneId.of("GMT")));
Date date = Date.from(instant);
为了从java.time.LocalDate创建一个java.util.Date,你需要:
代码可能如下所示:
LocalDate localDate = LocalDate.now();
Date date = new Date(localDate.atStartOfDay(ZoneId.of("America/New_York")).toEpochSecond() * 1000);
toEpochSecond
是从java.time.chrono.ChronoZonedDateTime
继承而来的。请参阅http://docs.oracle.com/javase/8/docs/api/java/time/chrono/ChronoZonedDateTime.html#toEpochSecond-- - nosid这对我有效:
java.util.Date d = new SimpleDateFormat("yyyy-MM-dd").parse(localDate.toString());
https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#toString--
Kotlin解决方案:
1)将此扩展函数粘贴到某个位置。
fun LocalDate.toDate(): Date = Date.from(this.atStartOfDay(ZoneId.systemDefault()).toInstant())
2) 使用它,不要再谷歌这个问题了。
val myDate = myLocalDate.toDate()
public static Date convertToTimeZone(Date date, String tzFrom, String tzTo) {
return Date.from(LocalDateTime.ofInstant(date.toInstant(), ZoneId.of(tzTo)).atZone(ZoneId.of(tzFrom)).toInstant());
}
LocalDate date = LocalDate.now();
DateFormat formatter = new SimpleDateFormat("dd-mm-yyyy");
try {
Date utilDate= formatter.parse(date.toString());
} catch (ParseException e) {
// handle exception
}
试试这个:
public Date convertFrom(LocalDate date) {
return Date.valueOf(date);
}