1

我正在尝试用 Java 编写一个日程安排程序,我需要弄清楚现在是什么时间,以及当前时间是否在两个设定时间之间。确定当前时间非常简单,但是您有什么建议可以确定它是否在一天中的两次之间。例如,星期四是上午 9:33。因此,我需要弄清楚该时间对应于一周中的哪个预定部分。我将如何比较时间以设置一周中的时间段,例如一周中的一组分段时间,例如{周一上午 9 点到 10 点,周二下午 3 点到 4 点,周四上午 8 点到 11 点},并查看当前时间介于哪个时间段之间?

4

5 回答 5

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();

已编辑

正如 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

于 2013-09-12T13:41:16.967 回答
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");
  }
}
于 2013-09-12T13:44:49.940 回答
2

我建议使用大纪元时间。

对于纪元时间的定义: 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/

于 2013-09-12T13:43:05.320 回答
1

Date类中有before(Date)andafter(Date)方法。

secondDate.before(firstDate)
于 2013-09-12T13:47:06.523 回答
0

如果你使用 Calendar 类,它有明确before()的和after()方法:

Calendar startDate = ...
Calendar endData = ...
isBetween = currentDate.after(startDate) && currentDate.before(endDate);
于 2013-09-12T13:47:44.390 回答