如何在时间间隔中检查日期时间戳发生

时间:2014-10-25 22:55:14

标签: java android

我有两个MyDate个对象。

class MyDate {

    public int hours, minutes;

    MyDate(int hours, int minutes) {
        this.hours = hours;
        this.minutes = minutes;
    }
}

MyDate startTime;
MyDate endTime;

我有一个时间戳作为第三个MyDate对象。

MyDate currentTime;

我想知道在区间 endDate - startDate

中是否包含currentTimeStamp
[------------[startTime]------------[currentTime]-----------------[endTime]--------------]

我看到三种时间组合:

  • 23:00 - 08:00 (07:00 - true)
  • 12:00 - 13:00 (07:00 - false)
  • 23:59 - 23:58 (07:00 - true)

解释第三种情况:

[-----------------(23:59)(00:00 - new Day)--(07:00)----------(23:58)--(00:00 - new Day)]

如何在区间 endDate - startDate 中检查是否包含currentTimeStamp?

1 个答案:

答案 0 :(得分:0)

重新发表我的评论,包括解决方案。

要确定时间是否在某个时间间隔内,您需要首先检查日期是开始时间之后是否结束时间之前。如果两个条件均为真,则日期在间隔内。创建两个方法,一个用于检查时间是否在另一个时间之前,另一个用于检查时间是否在另一个时间之后,则问题变得简单。

class MyDate {
    public int hours, minutes;

    MyDate(int hours, int minutes) {
        this.hours = hours;
        this.minutes = minutes;
    }

    public boolean isBefore(MyDate date) {
        if (date.hours < hours) {
            return true;
        }
        if (date.hours == hours) {
            return date.minutes < minutes;
        }
        return false;
    }

    public boolean isAfter(MyDate date) {
        if (date.hours > hours) {
            return true;
        }
        if (date.hours == hours) {
            return date.minutes > minutes;
        }
        return false;
    }

    public static boolean isBetween(MyDate intervalStart, MyDate intervalEnd, MyDate time) {
        return time.isAfter(intervalStart) && time.isBefore(intervalEnd);
    }
}

实际上,这样的时间和日期代码不应该出现在家庭作业练习中。在处理日期和时间时有大量的边缘情况,最好留给经过良好测试的库,比如JodaTime。