首先给出一个错误的实现:
// time1, time2 分别是 UTC 毫秒间隔
public static boolean getDayInterval(long time1, long time2) {
long base = 24*3600*1000L;
long day1 = time1/base + 1;
long day2 = time2/base + 1;
return (day1 - day2);
}
上面的代码之所以错误,因为涉及到时区了,中国大陆的时区是 UTC + 8。
涉及到时区操作,使用 Calendar 类:
public static boolean isSameDay(long time1, long time2) {
Calendar calendar1 = Calendar.getInstance();
calendar1.setTimeInMillis(time1);
Calendar calendar2 = Calendar.getInstance();
calendar1.setTimeInMillis(time2);
return calendar1.get(Calendar.DAY_OF_MONTH) == calendar2.get(Calendar.DAY_OF_MONTH);
}
上面的代码可以判断两个时间,在本地时区中是不是同一天,但是怎样计算天数间隔呢?我们需要在 UTC 时间的基础上加上那 8 个小时,得到本地时区的毫秒数,然后再计算间隔天数,正确代码如下:
public static long getDayInterval(long time1, long time2) {
// 获得当前时区
TimeZone tz = TimeZone.getDefault();
// UTC毫秒加上这个偏移值,得到本地时区的时间
long delta = tz.getRawOffset();
long base = 24*3600*1000L;
long day1 = (time1+delta)/base + 1L;
long day2 = (time2+delta)/base + 1L;
System.out.println(new Date(time1));
System.out.println(new Date(time2));
System.out.println(day1);
System.out.println(day2);
return (day1-day2);
}