代码之家  ›  专栏  ›  技术社区  ›  anirvan

特定时间间隔内的时间

  •  3
  • anirvan  · 技术社区  · 14 年前

    我试图解决一个看似简单的问题,但就是想不通。

    startTime stopTime ,可以认为格式如下: hh:mm:ss [24小时格式]。

    现在给我第三次机会- timeToTest -我要弄清楚 时间测试 介于 开始时间 . 除了时间,没有日期信息。

    举个例子-如果我有 开始时间 '22:30:00' 停止时间 = '03:30:00' ,然后为 时间测试 '01:14:23'

    我试过一个解决办法 java.util.Date 通过使用将时间转换为毫秒 getTime() ,但在任何超过24小时屏障的时间间隔内,逻辑都会失败。

    我正在尝试使用Java构建一个解决方案,但我相信逻辑是独立于语言的。

    5 回复  |  直到 14 年前
        1
  •  3
  •   anirvan    14 年前

    所以我能想出的最简单的解决办法,就是坚持老办法 java.util.Date ,如下所示:

        String d1 = "21:00:00";
        String d2 = "04:00:00";
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        String dToTest = "16:00:00";
        boolean isSplit = false, isWithin = false;
    
        Date dt1 = null, dt2 = null,  dt3 = null;
    
        dt1 = sdf.parse(d1);
        dt2 = sdf.parse(d2);
        dt3 = sdf.parse(dToTest);
    
        isSplit = (dt2.compareTo(dt1) < 0);
        System.out.println("[split]: " +isSplit);
    
        if (isSplit)
        {
            isWithin = (dt3.after(dt1) || dt3.before(dt2));
        }
        else
        {
            isWithin = (dt3.after(dt1) && dt3.before(dt2));
        }
    
        System.out.println("Is time within interval? " +isWithin);
    

        2
  •  2
  •   Aaron Digulla    14 年前

    您必须添加一个“日”,其中“0”==当前日期,“1”==第二天,依此类推。所以事实上什么时候 stopTime == '03:30:00' 应该是的 '27:30:00' (即第二天)。

    stopTime < startTime ,然后再加上86400秒。

        3
  •  2
  •   user639466    12 年前

    anirvan使用JodaTime的解决方案:

    public class TimeInterval24H {
        private final LocalTime start;
        private final LocalTime end;
    
        public TimeInterval24H(LocalTime start, LocalTime end) {
            this.start = start;
            this.end = end;
        }
    
        public TimeInterval24H(Date start, Date end) {
            this(new LocalTime(start), new LocalTime(end));
        }
    
        public boolean contains(Date test) {
            return contains(new LocalTime(test));
        }
    
        public boolean contains(LocalTime test) {
            if (isAccrossTwoDays()) {
                return (test.isAfter(getStart()) || test.isBefore(getEnd()));
            } else {
                return (test.isAfter(getStart()) && test.isBefore(getEnd()));
            }
        }
    
        boolean isAccrossTwoDays() {
            return getEnd().isBefore(getStart());
        }
    
        public LocalTime getStart() {
            return start;
        }
    
        public LocalTime getEnd() {
            return end;
        }
    
    }
    
        4
  •  1
  •   Jon Skeet    14 年前

    怎么样:

    • 检查该事件是否在结束时刻之前

    • 指定的时间是 时间 开始的瞬间?
      • 是:下一个事件是与开始时刻同一天的时间
      • 下一个

    所有这些都可能更容易写进去 Joda Time 而不是使用java.util.*,顺便说一下:)

        5
  •  0
  •   Evi Song    13 年前