首先给出一个错误的实现:

// 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);
}