因为之前在做练习时会涉及到计算时间差的问题,这里我采用原生JDK的方式重新回顾总结一次。
方法一:
private static long daysBetween(Date one, Date two) {
long difference = (one.getTime()-two.getTime())/86400000;
return Math.abs(difference);
}
由于转换成毫秒数计算,如果要获得较为准确的结果,应将日期规整,即将日期的时分秒设置为0:00点整点,避免2日期时间(时分秒)的差异造成计算偏差。
方法二:
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateTest {
private int getTermDays2() throws Exception{
String sEndDate = "2022-06-01";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = new Date();
Date date2 = sdf.parse(sEndDate);
long days = (date2.getTime() - date1.getTime()) / (24*3600*1000);
long yushu = (date2.getTime() - date1.getTime()) % (24*3600*1000);
System.out.println("days:" + days + ",yushu:" + yushu);
//规整方法1
date1.setHours(0);
date1.setMinutes(0);
date1.setSeconds(0);
long days2 = (date2.getTime() - date1.getTime()) / (24*3600*1000);
long yushu2 = (date2.getTime() - date1.getTime()) % (24*3600*1000);
System.out.println("days2:" + days2 + ",yushu2:" + yushu2);
//规整方法2
String sdate1 = sdf.format(date1);
date1 = sdf.parse(sdate1);
long days3 = (date2.getTime() - date1.getTime()) / (24*3600*1000);
long yushu3 = (date2.getTime() - date1.getTime()) % (24*3600*1000);
System.out.println("days3:" + days3 + ",yushu3:" + yushu3);
return (int)days;
}
public static void main(String[] args) {
DateTest dt = new DateTest();
try {
dt.getTermDays2();
} catch (Exception e) {
e.printStackTrace();
}
}
}
在只计算天数的情况下可以将日期先规整,避免较大误差。