我有一个包含服务的程序。该程序具有允许用户设置、禁用和启用时间的设置。在这两次之间(当然,如果启用了选项),程序不应该工作。
我实际上很难做到这一点。我已经成功地将“禁用”和“启用”时间转换为毫秒。我有以下代码,但它没有按预期工作。我想检测当前时间是否在两个设置时间之间,所以我可以在那个时候禁用服务。
public boolean isCurrentTimeBetween_enableDisable() {
long sysTime = System.currentTimeMillis();
if((sysTime > disableTime && sysTime < enableTime)) {
return true;
}
return false;
}
谁能给我更好的提示?
更新:
如果用户选择让我们说
- 禁用时间: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()
,因为方法todaysDisableDate(Context context)
和todaysEnableDate(Context context)
第二天退出(与系统时间相同的那一天)