// JDK1.8之前使用此方法
public static Integer getRemainSecondsOneDay(Date currentDate) {
Calendar midnight=Calendar.getInstance();
midnight.setTime(currentDate);
midnight.add(midnight.DAY_OF_MONTH,1);
midnight.set(midnight.HOUR_OF_DAY,0);
midnight.set(midnight.MINUTE,0);
midnight.set(midnight.SECOND,0);
midnight.set(midnight.MILLISECOND,0);
Integer seconds=(int)((midnight.getTime().getTime()-currentDate.getTime())/1000);
return seconds;
}
// JDK1.8写法
public static Integer getRemainSecondsOneDay(Date currentDate) {
LocalDateTime midnight = LocalDateTime.ofInstant(currentDate.toInstant(),
ZoneId.systemDefault()).plusDays(1).withHour(0).withMinute(0)
.withSecond(0).withNano(0);
LocalDateTime currentDateTime = LocalDateTime.ofInstant(currentDate.toInstant(),
ZoneId.systemDefault());
long seconds = ChronoUnit.SECONDS.between(currentDateTime, midnight);
return (int) seconds;
}
两者区别
使用LocalDateTime提供的对象是不可改变并且线程安全的
Calendar是线程非安全的,多线程情形下需要注意。