2013-12-07 66 views
1

正如标题所述;有没有办法比较时间,看他们是否在一定的时间内彼此? 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

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

long timestamp1 = date1.getTime(); 
long timestamp2 = date2.getTime(); 
if (Math.abs(timestamp1 - timestamp2) < TimeUnit.MINUTES.toMillis(15)) { 
    … 
} 
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 
} 
0

比较次的最佳方式是隐蔽一切,一个标准单位。我会写一个简单的方法来把时间乘以60,并将它们转换为分钟。然后,由于你有几分钟的时间,比较很容易。

+0

我不同意。如果你使用[体面的日期时间库](http://www.joda.org/joda-time/),则不需要转换单位,也不需要做任何常规的数学运算。 –

0

试试这个,如果你只有有比较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时间戳方法。

相关问题