将java.time.LocalDate转换为java.util.Date类型

我想将java.time.LocalDate转换为java.util.Date类型。因为我想将日期设置为JDateChooser。或者是否有任何日期选择器支持java.time日期?

492294 次浏览
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

这假设日期选择器使用系统默认时区将日期转换为字符串。

为了从java.time.LocalDate创建java.util.Date,你必须

  • LocalDate中添加一个time
  • 在一个时区内解释日期和时间
  • 获取自时代开始的秒数/毫秒数
  • 创建一个java.util.Date

代码可能如下所示:

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

java。time具有Temporal接口,您可以使用该接口从大多数time类创建Instant对象。Instant表示Epoch(所有其他日期和时间的基本参考)中时间轴上的毫秒数。

我们需要将Date转换为一个带Time和Zone的ZonedDateTime来进行转换:

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

下面是我用来将较新的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 api。不应该在产品代码中使用。

你可以这样使用java.sql.Date.valueOf()方法:

Date date = java.sql.Date.valueOf(localDate);
这里不需要添加时间和时区信息,因为它们是隐式获取的。
看到LocalDate到java.util.Date,反之亦然,最简单的转换? < / p >

这对我来说很管用:

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

芬兰湾的科特林解决方案:

1)将这个扩展函数粘贴到某个地方。

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

2)好好利用它,别再这样了。

val myDate = myLocalDate.toDate()
java.util.Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
    LocalDate date = LocalDate.now();
DateFormat formatter = new SimpleDateFormat("dd-mm-yyyy");
try {
Date utilDate= formatter.parse(date.toString());
} catch (ParseException e) {
// handle exception
}
localDate.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));

试试这个:

public Date convertFrom(LocalDate date) {
return Date.valueOf(date);
}