【问题标题】:between java.time.LocalTime (next day)java.time.LocalTime 之间(第二天)
【发布时间】:2016-05-14 01:31:02
【问题描述】:

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

我有这个实体:

 class Place {
   LocalTime startDay;
   LocalTime endDay;
 }

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

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

一个简单的isBefore/isAfter在这里是行不通的,因为我们还需要判断结束时间是不是在第二天。

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

【问题讨论】:

  • 发布您尝试过的内容。您认为您将如何处理关闭时间“在”(不考虑日期)开放时间之前的情况?
  • “当然,我们可以比较两次,然后做出决定,但我不认为这很好。”为什么你这么想?您在寻找什么解决方案?定义“好方法”。

标签: java java-8 java-time localtime


【解决方案1】:

如果我理解正确的话,你需要根据收盘时间是和开盘时间是同一天(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);
  }
}

【讨论】:

  • 谢谢,这就是我最终的结果。然而,这似乎是一个流行的用例,我想知道 API 是否有任何支持。或者可能是一些可以存储额外一天的结构,一次只进行一个比较。但是如果弄清楚了,这将不起作用,因为您还需要在输入时间确定这个“第二天”的事情。生活就是痛苦 :) 我会将您的答案标记为解决方案。
  • 我认为没有更简单的方法。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    我已经重构了@assylias 答案,所以我使用 int 而不是本地时间,因为我从 api 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 2019-05-29
      • 2014-03-30
      • 1970-01-01
      • 2021-11-02
      • 2019-01-19
      • 1970-01-01
      相关资源
      最近更新 更多