我正在尝试用Java编写计划程序,我需要弄清楚它是什么时间,以及当前时间是否介于两个设定时间之间。弄清楚当前时间非常简单,但是你有什么建议可以确定它是否在两天之间。例如,周四上午9:33。所以我需要弄清楚那个时间对应的那个预定部分。我如何比较一周中设定时间的时间,例如一周内的一系列分段时间,例如{周一上午9-10点,周二下午3-4点,周四上午8点到11点},并查看当前时间介于哪个时间段?
答案 0 :(得分:3)
如果你正在使用日期类,你可以这样做
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();
EDITED
根据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?
如果你想包括&#34;首字母&#34;和&#34;最终&#34;日期范围
boolean isAvailable = before.compareTo(toCheck) >= 0 && after.compareTo(toCheck) <= 0
如果你想排除&#34;首字母&#34;和&#34;最终&#34;日期范围
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
答案 1 :(得分:3)
找到任何日期所在的时间段的有效方法是拥有一个类;
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");
}
}
答案 2 :(得分:2)
我建议使用大纪元时间。
有关纪元时间的定义:http://en.wikipedia.org/wiki/Epoch_time
基本上,它是在特定日期之后的几秒钟,我相信1989年。如果您在大纪元时间翻译3次(当前时间和2次比较),您可以使用&gt; &LT; =等。
有关获取纪元时间的信息,请尝试此处(有多种语言):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/
答案 3 :(得分:1)
Date Class中有before(Date)
和after(Date)
方法。
secondDate.before(firstDate)
答案 4 :(得分:0)
如果您使用Calendar类,则它具有明确的before()
和after()
方法:
Calendar startDate = ...
Calendar endData = ...
isBetween = currentDate.after(startDate) && currentDate.before(endDate);