Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 承认;全等的;日期_Android_Date_Math - Fatal编程技术网

Android 承认;全等的;日期

Android 承认;全等的;日期,android,date,math,Android,Date,Math,我正在开发一个Android应用程序,我需要知道,给定日期和数字,第二个日期是否与数字中的第一个日期一致。 例如,如果第一个日期是13,那么如果将第一个日期的“K”乘以13天,就可以得到第二个日期,K是一个整数 使用for循环很容易做到这一点,但效率不高,所以最后我编写了两个函数: private static Date removeTime(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date)

我正在开发一个Android应用程序,我需要知道,给定日期和数字,第二个日期是否与数字中的第一个日期一致。 例如,如果第一个日期是13,那么如果将第一个日期的“K”乘以13天,就可以得到第二个日期,K是一个整数

使用for循环很容易做到这一点,但效率不高,所以最后我编写了两个函数:

private static Date removeTime(Date date) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.set(Calendar.HOUR_OF_DAY, 2);
    cal.set(Calendar.MINUTE, 30);
    cal.set(Calendar.SECOND, 30);
    cal.set(Calendar.MILLISECOND, 50);
    return cal.getTime();
}

public static boolean isImportantDay(Date date, Date selectedDate, int period, int numDays) {
    date = removeTime(date);
    selectedDate = removeTime(selectedDate);
    long milDate = date.getTime();
    long milSelDate = selectedDate.getTime();
    long temp = milSelDate - milDate;
    long dayIntervalMs = TimeUnit.DAYS.toMillis(period);
    Log.i("DATE", String.valueOf(selectedDate));

    if(temp% dayIntervalMs == 0){
        Log.i("SI", String.valueOf(temp));
        return true;
    }
    Log.i("NO", String.valueOf(temp));
    return false;
}
因此,使用日期的毫秒表示法,我应该能够知道它们是否“一致”。它在Android Studio Emulator上运行得非常好,但当我尝试在OnePlus One上运行它时,它只适用于某些日期

我使用removeTime()来防止毫秒有不同的时间

有人知道代码上的错误在哪里吗?
非常感谢。

您从Calendar.getInstance()中获得的内容将随配置的区域设置和时区而变化,这可能与您的设备和模拟器不同。在某些时区,如果日期跨度跨越时区更改(如切换到夏令时),代码可能会中断


解决此问题的方法是使用removeTime方法为没有时区(如UTC)的时区创建日历,并将其设置为本地时区日历中的日期,并从非时区日历中获取毫秒。然后,您的日历日将适用于您的本地时区,两天之间的毫秒数将是您所期望的,而不管您的本地时区的DST更改。

好的,我已尝试应用您的修复程序,但我还没有理解您的所有建议,而且仍然不起作用。我创建了一个新日历并将其设置为UTC时区,然后我将非时区日历的日期设置为第一个日历的日期,并返回第二个日历的日期。这就是我添加的内容,我返回
cal2.getTime()
Calendar cal2=Calendar.getInstance(TimeZone.getTimeZone(“UTC”);cal2.setTime(cal.getTime());返回cal2.getTime()@Javierd98——从cal获取月、日、年,并将其设置为cal2。在cal2上设置恒定的小时、分钟、秒。