JDK1.7 以日期大部分都用的是Date类型进行操作,但是它本身并不是线程安全的,所以我使用的是JDK1.8的新特性LocalDate进行操作。直接上代码。
/**
* 计算2个日期之间相差的 相差多少年月日
* 比如:2011-02-02 到 2017-03-02 相差 6年,1个月,0天
* @param fromDate YYYY-MM-DD
* @param toDate YYYY-MM-DD
* @return 年,月,日 例如 1,1,1
*/
public static String dayComparePrecise(String fromDate, String toDate){
Period period = Period.between(LocalDate.parse(fromDate), LocalDate.parse(toDate));
StringBuffer sb = new StringBuffer();
sb.append(period.getYears()).append(",")
.append(period.getMonths()).append(",")
.append(period.getDays());
return sb.toString();
}
附Date类型转换为LocalDate类型的方法。
public LocalDate dateToLocalDate(Date date) {
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
LocalDate localDate = localDateTime.toLocalDate();
return localDate;
}