在java.time.LocalTime之间(第二天)

时间:2016-02-04 12:25:37

标签: java java-8 java-time localtime

请建议是否有API支持来确定我的时间是否介于2 LocalTime个实例之间,或建议采用不同的方法。

我有这个实体:

 class Place {
   LocalTime startDay;
   LocalTime endDay;
 }

存储工作日的开始和结束时间,即从'9:00'到'17:00',或从'22:00'到'5:00'的夜总会。

我需要实现一个Place.isOpen()方法,以确定该地点是否在指定时间开放。

简单的isBefore / isAfter在这里不起作用,因为我们还需要确定结束时间是否在第二天。

当然,我们可以比较开始和结束时间并做出决定,但我想要一些没有额外逻辑的东西,只需要一个简单的between()调用。如果LocalTime不足以达到此目的,请提出其他建议。

3 个答案:

答案 0 :(得分:10)

如果我理解正确,你需要根据截止时间是在开放时间(9-17)或第二天(22-5)的同一天制作两种情况。

可能只是:

public static boolean isOpen(LocalTime start, LocalTime end, LocalTime time) {
  if (start.isAfter(end)) {
    return !time.isBefore(start) || !time.isAfter(end);
  } else {
    return !time.isBefore(start) && !time.isAfter(end);
  }
}

答案 1 :(得分:0)

对我来说这看起来更干净:

 if (start.isBefore(end)) {
     return start.isBefore(date.toLocalTime()) && end.isAfter(date.toLocalTime());
 } else {
     return date.toLocalTime().isAfter(start) || date.toLocalTime().isBefore(end);
 }

答案 2 :(得分:0)

我已经重构了@assylias的答案,所以我从api int整数格式获取开/关小时时会使用int而不是本地时间

public static boolean isOpen(int start, int end, int time) {
    if (start>end) {
        return time>(start) || time<(end);
    } else {
        return time>(start) && time<(end);
    }
}
public static boolean isOpen(int start, int end) {
    SimpleDateFormat sdf = new SimpleDateFormat("HH");
    Date resultdate = new Date();
    String hour = sdf.format(resultdate);
    int time = Integer.valueOf(hour);
    if (start>end) {
        return time>(start) || time<(end);
    } else {
        return time>(start) && time<(end);
    }
}