将java.time.LocalDate转换为java.util.Datetypes

我想将java.time.LocalDate转换为java.util.Datetypes。 因为我想将date设置为JDateChooser 。 还是有任何支持java.timedate的dateselect器?

 Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); 

这假设你的dateselect器使用系统默认的时区将date转换为string。

下面是一个实用工具类,我用java.time新的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评论进行编辑。

您可以使用java.sql.Date.valueOf()方法:

 Date date = java.sql.Date.valueOf(localDate); 

不需要在这里添加时间和时区信息,因为它们是隐含的。
看到LocalDate到java.util.Date,反之亦然最简单的转换?

java.time具有Temporal接口,您可以使用它来从大多数时间类创buildInstant对象。 即时表示时间线上的毫秒数 – 时间线上的所有其他date和时间的基准。

我们需要将date转换为带有时间和区域的ZonedDateTime,以进行转换:

 LocalDate ldate = ...; Instant instant = Instant.from(ldate.atStartOfDay(ZoneId.of("GMT"))); Date date = Date.from(instant); 

为了从java.time.LocalDate创build一个java.util.Date ,你必须

  • 添加一个时间到LocalDate
  • 解释时区内的date和时间
  • 获得自纪元以来的秒数/毫秒数
  • 创build一个java.util.Date

代码可能如下所示:

 LocalDate localDate = ...; Date date = new Date(localDate.atStartOfDay(ZoneId.of("America/New_York")).toEpochSecond() * 1000); 

这适用于我:

 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–

 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()); } 

简单

 public Date convertFrom(LocalDate date) { return java.sql.Timestamp.valueOf(date.atStartOfDay()); } 

LGoodDatePicker本身使用java.time包(又名Java 8时代,或JSR-310)。 更具体地说,LGoodDatePicker使用“java.time.LocalDate”来存储dateselect器值。 这是一个很好的dateselect器组件。 在项目主页上有一些截图和演示。

项目页面在这里:
https://github.com/LGoodDatePicker/LGoodDatePicker

这个解决scheme有点长,你可以在这里包括一些东西,但据我了解你的问题,你只需要实际的date。

 int day = this.datePicker2.getDate().getDayOfMonth(); int month = this.datePicker2.getDate().getMonthValue(); int year = this.datePicker2.getDate().getYear(); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, month-1); calendar.set(Calendar.DATE, day); Date date = calendar.getTime(); 

可能不看起来优雅,但它的作品。 注意:使用月份1是因为日历中的月份从0开始。