我正在处理以下问题。在我的用例中,用户首次启动应用程序时设置了两个日期,即StartSleepingHours和StopSleepingHours。如何在Android中检查当前时间是否与未来有间隔?
例如,它们可能看起来像StartSleepingHours:Thu 2 Mar 20:00 2017
和StopSleepingHours:Thu 2 Mar 8:00 2017
(注意它们是在用户设置日期之后的同一日期)。现在,我的问题是,我有一个定期任务,每15分钟运行一次以检查是否在StartSH和StopSH间隔之间确定是否启动活动监视服务。
显然,我不希望我的服务在睡觉时监视用户的活动。目前,我试图从StartSH和StopSH中仅提取小时和分钟信息,并从中创建日期对象以便与现在进行比较,但我非常困惑和沮丧如何检查现在是否在间隔内开始/在将来停止SH。
目前,我在我的代码,这样的:
public static boolean isWithinSH(Date startSH, Date now, Date stopSH) {
boolean isSH = false;
Calendar calendar = Calendar.getInstance(Locale.UK);
calendar.set(Calendar.HOUR_OF_DAY, startSH.getHours());
calendar.set(Calendar.MINUTE, startSH.getMinutes());
Date sameDayStartSH = calendar.getTime();
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
Date midnight = calendar.getTime();
calendar.add(Calendar.DAY_OF_WEEK, 1);
calendar.set(Calendar.HOUR_OF_DAY, stopSH.getHours());
calendar.set(Calendar.MINUTE, stopSH.getMinutes());
Date currentStopSH = calendar.getTime();
if (now.before(midnight) && now.after(sameDayStartSH)) {
System.out.println("SLEEPING HOURS");
isSH = true;
} else if (now.after(midnight) && now.before(currentStopSH)) {
System.out.println("SLEEPING HOURS");
isSH = true;
} else {
System.out.println("NOT SLEEPING HOURS");
}
return isSH;
}
我试图测试一样,在Java环境的方法:
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance(Locale.UK);
calendar.add(Calendar.DAY_OF_WEEK, -1);
calendar.set(Calendar.HOUR_OF_DAY, 20);
calendar.set(Calendar.MINUTE, 0);
Date StartSH = calendar.getTime();
calendar.add(Calendar.DAY_OF_WEEK, 2);
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 45);
Date StopSH = calendar.getTime();
Date now = new Date(); // 9:42
if (isWithingSH(StartSH, now, StopSH)) {
System.out.println("SPEEPING HOURS");
} else {
System.out.println("NOT SPEEPING HOURS");
}
}
控制台显示不睡觉个小时,但我认为它应该说休息时间9:30以前
有isBefore和isAfter方法。你试过了吗? –
@VladMatvienko哈:D这是新的日期():) –
@ cricket_007我认为日期类只有在(日期日期)和befor(日期日期)之后,我在示例中使用 –