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

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

当前回答

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

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

其他回答

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

  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”格式打印您的日期

为了简化将LocalDate/time转换为Date的过程,反之亦然,我创建了两个图表:

将LocalDate转换为Date,反之亦然:

将LocalDateTime转换为Date,反之亦然:

LocalDate localDate = LocalDate.parse( new SimpleDateFormat("yyyy-MM-dd").format(date) );

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

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

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

LocalDateTime date = LocalDateTime.ofInstant(timestamp, ZoneId.systemDefault()); 

这条简单的线有什么问题?

new LocalDateTime(new Date().getTime()).toLocalDate();