Convert java.time.LocalDate into java.util.Date type

匿名 (未验证) 提交于 2019-12-03 02:11:02

问题:

I want to convert java.time.LocalDate into java.util.Date type. Because I want to set the date into JDateChooser. Or is there any date chooser that supports java.time dates?

回答1:

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

That assumes your date chooser uses the system default timezone to transform dates into strings.



回答2:

Here's a utility class I use to convert the newer java.time classes to java.util.Date objects and vice versa:

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

Edited based on @Oliv comment.



回答3:

You can use java.sql.Date.valueOf() method as:

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

No need to add time and time zone info here because they are taken implicitly.
See LocalDate to java.util.Date and vice versa simpliest conversion?



回答4:

java.time has the Temporal interface which you can use to create Instant objects from most of the the time classes. Instant represents milliseconds on the timeline in the Epoch - the base reference for all other dates and times.

We need to convert the Date into a ZonedDateTime, with a Time and a Zone, to do the conversion:

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


回答5:

In order to create a java.util.Date from a java.time.LocalDate, you have to

  • add a time to the LocalDate
  • interpret the date and time within a time zone
  • get the number of seconds / milliseconds since epoch
  • create a java.util.Date

The code might look as follows:

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


回答6:

This works for me:

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--



回答7:

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


回答8:

Simple

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


回答9:

This solution here is a bit longer and you could include something for the time here as well but as far as I understand your problem you just need the actual 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(); 

Might not look that elegant but it works. Note: month-1 is used because the months in calendar start with 0.



回答10:

Kotlin Solution:

1) Paste this extension function somewhere.

fun LocalDate.toDate(): Date = Date.from(this.atStartOfDay(ZoneId.systemDefault()).toInstant()) 

2) Use it, and never google this again.

val myDate = myLocalDate.toDate() 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!