将java.time.LocalDate转换为java.util.Datetypes
我想将java.time.LocalDate
转换为java.util.Date
types。 因为我想将date设置为JDateChooser
。 还是有任何支持java.time
date的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器组件。 在项目主页上有一些截图和演示。
这个解决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开始。