java中描述时间的类常用的也就是java.util.Date
类和java.util.Calendar
类,但是在jdk1.1时,Date
类中的很多API都已经过时,官方推荐使用Calendar
类来描述时间。
由于有这样的需求:“判断一个时间点是不是在某个时间段内”,所以才仔细看了下Calendar
的API的用法。
// 判断是不是在某个时间点前
public boolean before(Object when);
// 判断是不是在某个时间点后
public boolean after(Object when);
看了下官方给出的关于before
方法的实现,也蛮简单的:
public boolean before(Object when) {
return when instanceof Calendar
&& compareTo((Calendar)when) < 0;
}
既然这样的话,我们就可以据此写一个方法,来判断一个时间点是不是在某一个时间段内。
import java.util.Calendar;
public final class TimeUtils {
public static boolean between(Calendar now, Calendar start, Calendar end) {
return now != null && start != null && end != null && now.after(start) && now.before(end);
}
}
然后就可以这样用:
// c is an instance of Calendar
Calendar start = (Calendar) c.clone();
Calendar end = (Calendar) c.clone();
start.set(Calendar.HOUR_OF_DAY, 8);
start.set(Calendar.MINUTE, 30);
end.set(Calendar.HOUR_OF_DAY, 10);
end.set(Calendar.MINUTE, 5);
if (TimeUtils.between(c, start, end)) {
// do what you want
}