将java.util.Date对象转换为新的JDK 8/JSR-310 java.time.LocalDate的最佳方法是什么?

Date input = new Date();
LocalDate date = ???

当前回答

LocalDate ld = new java.sql.Date( new java.util.Date().getTime() ).toLocalDate();

其他回答

如果您正在使用ThreeTen Backport,包括ThreeTenABP

    Date input = new Date(); // Imagine your Date here
    LocalDate date = DateTimeUtils.toInstant(input)
            .atZone(ZoneId.systemDefault())
            .toLocalDate();

如果您正在使用JSR 310的后端端口,要么您没有Date.toInstant()方法,要么它不会为您提供进一步转换所需的org.threeten.bp.Instant。相反,您需要使用作为后端口一部分的DateTimeUtils类。转换的剩余部分是一样的,所以解释也是一样的。

Date input = new Date();
LocalDateTime  conv=LocalDateTime.ofInstant(input.toInstant(), ZoneId.systemDefault());
LocalDate convDate=conv.toLocalDate();

Date实例也包含时间和日期,而LocalDate不包含。因此,您可以首先将它转换为LocalDateTime使用它的方法的finstant(),然后如果你想要它没有时间,然后将实例转换为LocalDate。

首先,将日期转换为即时很容易

Instant timestamp = new Date().toInstant(); 

然后,你可以在jdk 8中使用ofInstant()方法将Instant转换为任何日期api:

LocalDateTime date = LocalDateTime.ofInstant(timestamp, ZoneId.systemDefault()); 
LocalDate localDate = LocalDate.parse( new SimpleDateFormat("yyyy-MM-dd").format(date) );

我用下面的方法解决了这个问题

  import org.joda.time.LocalDate;
  Date myDate = new Date();
  LocalDate localDate = LocalDate.fromDateFields(myDate);
  System.out.println("My date using Date" Nov 18 11:23:33 BRST 2016);
  System.out.println("My date using joda.time LocalTime" 2016-11-18);

在本例中,localDate以“yyyy-MM-dd”格式打印您的日期