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

时间:2014-04-08 06:29:46

标签: java java-8 java-time

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

12 个答案:

答案 0 :(得分:476)

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

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

答案 1 :(得分:91)

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

答案 2 :(得分:82)

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

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

此处无需添加时区和时区信息,因为它们是隐含的 见LocalDate to java.util.Date and vice versa simpliest conversion?

答案 3 :(得分:14)

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

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

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

答案 4 :(得分:12)

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

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

代码可能如下所示:

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

答案 5 :(得分:10)

这对我有用:

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

答案 6 :(得分:3)

Kotlin解决方案:

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

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

2)使用它,再也不会谷歌了。

val myDate = myLocalDate.toDate()

答案 7 :(得分:-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());
} 

答案 8 :(得分:-1)

简单

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

答案 9 :(得分:-1)

    LocalDate date = LocalDate.now();
    DateFormat formatter = new SimpleDateFormat("dd-mm-yyyy");
    try {
        Date utilDate= formatter.parse(date.toString());
    } catch (ParseException e) {
        // handle exception
    }

答案 10 :(得分:-2)

这里的解决方案有点长,你可以在这里包含一些东西,但据我了解你的问题,你只需要实际的日期。

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

可能看起来不那么优雅但它有效。 注意:使用month-1是因为日历中的月份从0开始。

答案 11 :(得分:-2)

java.util.Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());