我正在處理以下問題。在我的用例中,用戶首次啓動應用程序時設置了兩個日期,即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(日期日期)之後,我在示例中使用 –