我有一个包含服务的程序。该程序的设置允许用户设置,禁用和启用时间。在这两次之间(如果选项启用当然),程序不应该工作。检测当前时间是否在两个设置时间之间
我实际上很难做到这一点。我已经成功地将毫秒中的“禁用”和“启用”时间转换成了。我有以下代码,但它不能按预期工作。我想检测当前时间是否在两个设置时间之间,因此我可以在当时禁用服务。
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