415

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

4

12 回答 12

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

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

于 2014-04-08T06:39:29.393 回答
117

这是我用来将较新的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 评论编辑。

于 2014-12-05T19:34:10.567 回答
101

免责声明:仅用于说明现有的 java api。不应在生产代码中使用。

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

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

无需在此处添加时间和时区信息,因为它们是隐式获取的。
请参阅LocalDate 到 java.util.Date ,反之亦然最简单的转换?

于 2015-02-17T14:46:00.880 回答
17

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

我们需要将 Date 转换为 ZonedDateTime,带有 Time 和 Zone,以进行转换:

LocalDate ldate = ...;
Instant instant = Instant.from(ldate.atStartOfDay(ZoneId.of("GMT")));
Date date = Date.from(instant);
于 2014-12-02T10:48:49.630 回答
15

这对我有用:

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

于 2015-03-21T21:03:01.843 回答
13

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

  • LocalDate添加时间
  • 解释时区内的日期和时间
  • 获取自纪元以来的秒数/毫秒数
  • 创建一个java.util.Date

代码可能如下所示:

LocalDate localDate = LocalDate.now();
Date date = new Date(localDate.atStartOfDay(ZoneId.of("America/New_York")).toEpochSecond() * 1000);
于 2014-04-08T06:40:10.433 回答
5

Kotlin 解决方案:

1)将此扩展功能粘贴到某处。

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

2)使用它,永远不要再用谷歌搜索它。

val myDate = myLocalDate.toDate()
于 2018-04-11T15:04:20.850 回答
0
localDate.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
于 2022-02-02T10:24:31.940 回答
-1
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());
} 
于 2016-02-17T10:13:26.783 回答
-1
    LocalDate date = LocalDate.now();
    DateFormat formatter = new SimpleDateFormat("dd-mm-yyyy");
    try {
        Date utilDate= formatter.parse(date.toString());
    } catch (ParseException e) {
        // handle exception
    }
于 2020-11-25T13:16:13.967 回答
-2

简单的

public Date convertFrom(LocalDate date) {
    return java.sql.Timestamp.valueOf(date.atStartOfDay());
}
于 2016-03-15T02:58:52.507 回答
-4
java.util.Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
于 2018-10-18T06:40:44.873 回答