我有一個包含服務的程序。該程序的設置允許用戶設置,禁用和啓用時間。在這兩次之間(如果選項啓用當然),程序不應該工作。檢測當前時間是否在兩個設置時間之間
我實際上很難做到這一點。我已經成功地將毫秒中的「禁用」和「啓用」時間轉換成了。我有以下代碼,但它不能按預期工作。我想檢測當前時間是否在兩個設置時間之間,因此我可以在當時禁用服務。
public boolean isCurrentTimeBetween_enableDisable() {
long sysTime = System.currentTimeMillis();
if((sysTime > disableTime && sysTime < enableTime)) {
return true;
}
return false;
}
任何人都可以給我更好的提示嗎?
UPDATE:
如果用戶選擇可以說
- 禁用時間:15:00
- 啓用時間:22:00
然後代碼工作正常。
但是,如果用戶選擇讓說:
- 禁用時間:22:00
- 啓用時間:06:00
那麼它顯然是啓用時間是第二天。所以我寫了下面的代碼:
if(todaysDisableDate(context).getTime() > enableAt.getTime()) {
enableCal.add(Calendar.DAY_OF_MONTH, 1);
enableAt = formatEnableDate.parse(enableCal.get(Calendar.DAY_OF_MONTH) + "-" +(enableCal.get(Calendar.MONTH)+1) + "-" + enableCal.get(Calendar.YEAR) + " " + endHours_string + ":" + endMinutes_string);
}
下面的代碼獲取實際日期。
public Date todaysDisableDate(Context context) {
Calendar disableCal = Calendar.getInstance();
getTimeValues_preferences((ContextWrapper) context, true, false); // this only gets a string for hour and minute (which is set up in preferences)
Date disableAt = null;
try {
disableAt = formatDisableDate.parse(disableCal.get(Calendar.DAY_OF_MONTH)+"-"+(disableCal.get(Calendar.MONTH)+1)+"-"+disableCal.get(Calendar.YEAR)+" "+startHours_string+":"+startMinutes_string); // današnji datum z današnjo uro
} catch (ParseException e) {
e.printStackTrace();
}
return disableAt;
}
public Date todaysEnableDate(Context context) {
Calendar enableCal = Calendar.getInstance();
getTimeValues_preferences((ContextWrapper) context, false, true);
Date enableAt = null;
try {
enableAt = formatEnableDate.parse(enableCal.get(Calendar.DAY_OF_MONTH)+"-"+(enableCal.get(Calendar.MONTH)+1)+"-"+enableCal.get(Calendar.YEAR)+" "+endHours_string+":"+endMinutes_string); // današnji datum z današnjo uro
if(todaysDisableDate(context).getTime() > enableAt.getTime()) {
enableCal.add(Calendar.DAY_OF_MONTH, 1);
enableAt = formatEnableDate.parse(enableCal.get(Calendar.DAY_OF_MONTH)+"-"+(enableCal.get(Calendar.MONTH)+1)+"-"+enableCal.get(Calendar.YEAR)+" "+endHours_string+":"+endMinutes_string);
}
} catch (ParseException e) {
}
return enableAt;
}
如果服務在00:00之前開始,代碼工作正常。但是,如果在午夜後在服務啓動(次日),然後我得到的方法isCurrentTimeBetween_enableDisable()
假的,因爲方法和todaysEnableDate(Context context)
被拉出第二天(在同一天體系小時是)
那麼看起來有點笨拙(我寧願只是'返回sysTime> disableTime && sysTime
2013-04-24 17:44:01
我編輯了我的問題。 – rootpanthera 2013-04-24 17:55:37
可能使用'joda-time'庫嗎? – 2013-04-24 19:06:58