如何判断当前时间是否介于两次之间?

时间:2013-09-12 13:35:49

标签: java

我正在尝试用Java编写计划程序,我需要弄清楚它是什么时间,以及当前时间是否介于两个设定时间之间。弄清楚当前时间非常简单,但是你有什么建议可以确定它是否在两天之间。例如,周四上午9:33。所以我需要弄清楚那个时间对应的那个预定部分。我如何比较一周中设定时间的时间,例如一周内的一系列分段时间,例如{周一上午9-10点,周二下午3-4点,周四上午8点到11点},并查看当前时间介于哪个时间段?

5 个答案:

答案 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);