将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 = ???
当前回答
我用下面的方法解决了这个问题
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”格式打印您的日期
其他回答
public static LocalDate Date2LocalDate(Date date) {
return LocalDate.parse(date.toString(), DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy"))
这个格式是从日期#到字符串
public String toString() {
// "EEE MMM dd HH:mm:ss zzz yyyy";
BaseCalendar.Date date = normalize();
StringBuilder sb = new StringBuilder(28);
int index = date.getDayOfWeek();
if (index == BaseCalendar.SUNDAY) {
index = 8;
}
convertToAbbr(sb, wtb[index]).append(' '); // EEE
convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' '); // MMM
CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd
CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':'); // HH
CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm
CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss
TimeZone zi = date.getZone();
if (zi != null) {
sb.append(zi.getDisplayName(date.isDaylightTime(), TimeZone.SHORT, Locale.US)); // zzz
} else {
sb.append("GMT");
}
sb.append(' ').append(date.getYear()); // yyyy
return sb.toString();
}
如果您正在使用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类。转换的剩余部分是一样的,所以解释也是一样的。
LocalDate localDate = LocalDate.parse( new SimpleDateFormat("yyyy-MM-dd").format(date) );
LocalDate ld = new java.sql.Date( new java.util.Date().getTime() ).toLocalDate();
为了简化将LocalDate/time转换为Date的过程,反之亦然,我创建了两个图表:
将LocalDate转换为Date,反之亦然:
将LocalDateTime转换为Date,反之亦然: