Android 承认;全等的;日期
我正在开发一个Android应用程序,我需要知道,给定日期和数字,第二个日期是否与数字中的第一个日期一致。 例如,如果第一个日期是13,那么如果将第一个日期的“K”乘以13天,就可以得到第二个日期,K是一个整数 使用for循环很容易做到这一点,但效率不高,所以最后我编写了两个函数: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)
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上设置恒定的小时、分钟、秒。