将java.util.Date对象转换为新的JDK 8/JSR-310 java.time.LocalDate的最佳方法是什么?
Date input = new Date();
LocalDate date = ???
将java.util.Date对象转换为新的JDK 8/JSR-310 java.time.LocalDate的最佳方法是什么?
Date input = new Date();
LocalDate date = ???
当前回答
如果你正在使用Java 8, @JodaStephen的答案显然是最好的。然而,如果你使用的是JSR-310后端口,你不得不做这样的事情:
Date input = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(input);
LocalDate date = LocalDate.of(cal.get(Calendar.YEAR),
cal.get(Calendar.MONTH) + 1,
cal.get(Calendar.DAY_OF_MONTH));
其他回答
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”格式打印您的日期
Date input = new Date();
LocalDateTime conv=LocalDateTime.ofInstant(input.toInstant(), ZoneId.systemDefault());
LocalDate convDate=conv.toLocalDate();
Date实例也包含时间和日期,而LocalDate不包含。因此,您可以首先将它转换为LocalDateTime使用它的方法的finstant(),然后如果你想要它没有时间,然后将实例转换为LocalDate。
LocalDate ld = new java.sql.Date( new java.util.Date().getTime() ).toLocalDate();
如果你正在使用Java 8, @JodaStephen的答案显然是最好的。然而,如果你使用的是JSR-310后端口,你不得不做这样的事情:
Date input = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(input);
LocalDate date = LocalDate.of(cal.get(Calendar.YEAR),
cal.get(Calendar.MONTH) + 1,
cal.get(Calendar.DAY_OF_MONTH));