我正在尝试用 Java 编写一个日程安排程序,我需要弄清楚现在是什么时间,以及当前时间是否在两个设定时间之间。确定当前时间非常简单,但是您有什么建议可以确定它是否在一天中的两次之间。例如,星期四是上午 9:33。因此,我需要弄清楚该时间对应于一周中的哪个预定部分。我将如何比较时间以设置一周中的时间段,例如一周中的一组分段时间,例如{周一上午 9 点到 10 点,周二下午 3 点到 4 点,周四上午 8 点到 11 点},并查看当前时间介于哪个时间段之间?
5 回答
如果您使用的是日期类,您可以这样做
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm");
Date before = sdf.parse("07/05/2012 08:00");
Date after = sdf.parse("07/05/2012 08:30");
Date toCheck = sdf.parse("07/05/2012 08:15");
//is toCheck between the two?
boolean isAvailable = (before.getTime() < toCheck.getTime()) && after.getTime() > toCheck.getTime();
已编辑
正如 Jonathan Drapeau 所建议的,您也可以使用 compareTo。
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm");
Date before = sdf.parse("07/05/2012 08:00");
Date after = sdf.parse("07/05/2012 08:30");
Date toCheck = sdf.parse("07/05/2012 08:15");
//is toCheck between the two?
如果您想包括“初始”和“最终”日期范围
boolean isAvailable = before.compareTo(toCheck) >= 0 && after.compareTo(toCheck) <= 0
如果要排除“初始”和“最终”日期范围
boolean isAvailable = before.compareTo(toCheck) > 0 && after.compareTo(toCheck) < 0
Calendar
你也可以在课堂上使用它。
无论如何,我强烈建议您使用日历。这是一种精确的方式
你可以这样检查:
Calendar cal1 = Calendar.getInstance(); // for example 12:00:00
Calendar cal2 = Calendar.getInstance(); // for exmaple 12:30:00
Calendar userTime = Calendar.getInstance(); // time to test: 12:15:00
if(user.after(cal1)&& user.before(cal2)){
//...
}
并初始化和设置时间日历,检查这个:
http://www.tutorialspoint.com/java/util/calendar_settime.htm
找到任何日期在哪个时期的一种有效方法是开设课程;
public class TimePeriod implements Comparable<TimePeriod>{
Date start;
Date end;
//Constructor, getters, setters
boolean isIn(Date date) {
return date.after(start) && date.before(end);
}
public int compareTo(TimePeriod other) {
return start.compareTo(other.start);
}
}
TimePeriod
..然后创建一个可以执行二进制搜索的排序列表。
编辑:
这可能会使二进制搜索更容易;
int check(Date date) {
if (isIn(date)) {
return 0;
} else if (start.after(date)) {
return -1;
} else if (end.before(date)) {
return 1;
} else {
throw new IllegalStateException("Time has gone badly wrong");
}
}
我建议使用大纪元时间。
对于纪元时间的定义: http ://en.wikipedia.org/wiki/Epoch_time
基本上,它是在特定日期之后的秒数,我相信是 1989 年。如果您在纪元时间翻译 3 次(当前时间和要比较的 2 次),您可以使用 > < = 等。
有关获取纪元时间的信息,请在此处尝试(有多种语言):http ://shafiqissani.wordpress.com/2010/09/30/how-to-get-the-current-epoch-time-unix-timestamp/
不幸的是,我的java缺少或者我会给你一些代码:)
编辑:Java 纪元时间代码:
long epoch = System.currentTimeMillis()/1000;
因为我的 Java 很糟糕,而且我所在的地方没有解释器,所以我只能建议使用这个网站来帮助将其他日期转换为纪元时间:http ://www.epochconverter.com/
Date类中有before(Date)
andafter(Date)
方法。
secondDate.before(firstDate)
如果你使用 Calendar 类,它有明确before()
的和after()
方法:
Calendar startDate = ...
Calendar endData = ...
isBetween = currentDate.after(startDate) && currentDate.before(endDate);