2

如标题所述;有没有办法比较时间以查看它们是否在彼此的一定时间内?IE。一种判断 Time1 是否在 Time2 的 15 分钟内的方法。一个更复杂的例子可能是在 75 分钟内(因为小时也会改变,因此将分钟计数重置为 0。

在 java/android 中有很多不同的方法来比较日期和时间。有Time班级,Date班级和Calendar班级。甚至有一种compareTo方法和一种方法来检查日期是在另一个之前还是之后,但是我找不到解决我的问题的方法。

另一个例子:

如果我有 Time1, 12:30 和 Time2, 12:10,我想检查它们是否相距 15 分钟。我可以比较分钟差异的差异。30 - 10 = 20。20 显然不小于 15。

但是,如果 Time1 是 12:56 而 Time2 是 13:02,这种方法是行不通的。2 - 56 = -54,但实际差值为 6。一种解决方案是,如果您知道哪个时间较晚,请检查较晚的分钟是否小于前一分钟。如果不是,则将前一分钟加 60。

这是比较的好方法吗?这会给我的代码增加很多复杂性,尤其是当我还需要检查时间和日期时。是否有更简单的解决方案或 api 可用?

4

4 回答 4

6

使用时间戳(自 1970 年以来的毫秒数)来检查日期的差异。

long timestamp1 = date1.getTime();
long timestamp2 = date2.getTime();
if (Math.abs(timestamp1 - timestamp2) < TimeUnit.MINUTES.toMillis(15)) {
    …
}
于 2013-12-07T20:47:20.057 回答
1

如果您只需要比较格式 hh:mm,请尝试此操作:

String txtTime1; // input with format hh:mm
String txtTime2; // input with format hh:mm
int hour1 = Integer.parseInt(txtTime1.split(":")[0]);
int hour2 = Integer.parseInt(txtTime2.split(":")[0]);
int min1  = Integer.parseInt(txtTime1.split(":")[1]);
int min2  = Integer.parseInt(txtTime2.split(":")[1]);
int time1 = hour1 * 60 + min1;
int time2 = hour2 * 60 + min2;
if(Math.abs(time1 - time2) <= 15) {
    // equal or less then 15 minute difference
} else {
    // more then 15 minute difference
}

如果您有比较整个日期,我建议您使用 UNIX 时间戳方法。

于 2013-12-07T20:57:21.987 回答
0

试试这个 :

Calendar start_time = Calendar.getInstance();
// set exact start_time here
Calendar end_time = Calendar.getInstance();
// set exact end_time here

// Make sure to set Calendar.MINUTE
start_time.add(Calendar.MINUTE, 15); // adding 15 minutes to the start_time
if (start_time.after(end_time)) {
    // times are less than or equal to 15 mins apart
} else {
    // times are more than 15 mins apart
}
于 2013-12-07T20:47:56.220 回答
0

比较时间的最佳方法是将所有内容转换为一个标准单位。我会编写一个简单的方法来计算小时数并将它们乘以 60 以将它们转换为分钟。然后,由于您有以分钟为单位的时间,因此比较很容易。

于 2013-12-07T20:48:00.517 回答