【发布时间】:2014-01-28 17:44:31
【问题描述】:
我正在尝试检查当前时间是否在指定范围内。我做了一个方法来检查这个,但它不起作用。我不确定为什么不以及如何让它工作。
private Calendar fromTime;
private Calendar toTime;
private Calendar currentTime;
public boolean checkTime(String time) {
try {
String[] times = time.split("-");
String[] from = times[0].split(":");
String[] until = times[1].split(":");
fromTime = Calendar.getInstance();
fromTime.set(Calendar.HOUR, Integer.valueOf(from[0]));
fromTime.set(Calendar.MINUTE, Integer.valueOf(from[1]));
toTime= Calendar.getInstance();
toTime.set(Calendar.HOUR, Integer.valueOf(until[0]));
toTime.set(Calendar.MINUTE, Integer.valueOf(until[1]));
currentTime = Calendar.getInstance();
currentTime.set(Calendar.HOUR, Calendar.HOUR_OF_DAY);
currentTime.set(Calendar.MINUTE, Calendar.MINUTE);
if(currentTime.after(fromTime) && currentTime.before(toTime)){
return true;
}
} catch (Exception e) {
return false;
}
return false;
}
我正在尝试这样测试:
if(checkTime("06:00-19:00")){
inRange = true;
}
NPE 消失了,但它仍然没有计算时间是否在fromTime 到toTime 的范围内。非常感谢任何帮助!
【问题讨论】:
-
你在任何地方定义fromTime和toTime吗?
-
currentTime.set(Calendar.MINUTE, Calendar.MINUTE);和currentTime.set(Calendar.HOUR, Calendar.HOUR_OF_DAY);不符合您的预期。最好阅读documentation。 -
是的,对不起!检查我的编辑!
-
为什么使用字段而不是局部变量?顺便说一句:发生 NPE 是因为您从未初始化
toTime和currentTime。 -
你不能使用 toTime.set() 你必须先初始化它。所以更好的地方 toTime = Calendar.getInstance();在调用 set() 之前,同样适用于 currentTime = Calendar.getInstance();