java毫秒找到最接近当前时间

时间:2010-11-29 08:27:08

标签: java

我有以下代码:

for(int i=0; i<a.length; i++){
    diff[i] = a.getTime() - b.getTime();
}

a.getTime() = time in array.
b.getTime() = current time on computer.

找出哪一个a.getTime最接近当前时间的最佳方法是什么?

输出差异:

-143214521
32942394
-132931
-21340

3 个答案:

答案 0 :(得分:2)

保持差异的绝对值(使用Math.abs),并跟踪到目前为止看到的最小值以及它出现的索引。

例如:

long currentTime = b.getTime(); // Only call once, to be consistent
long minAbsDiff = Long.MAX_VALUE;
int minIndex = -1;
for(int i=0; i < a.length; i++) {
    diff[i] = a[i].getTime() - currentTime;
    long abs = Math.abs(diff[i]);
    if (abs < minAbsDiff) {
        minAbsDiff = abs;
        minIndex = i;
    }
}

这假设您在其他地方仍然需要diff[i]。如果不这样做,并且只需要具有最小差异的a值,则可以更紧凑地编写它:

long currentTime = b.getTime(); // Only call once, to be consistent
long minAbsDiff = Long.MAX_VALUE;
WhateverType minContainer = null;
for (WhateverType x : a) {
    long abs = Math.abs(x.getTime() - currentTime);
    if (abs < minAbsDiff) {
        minAbsDiff = abs;
        minContainer = x;
    }
}

答案 1 :(得分:1)

对每个结果执行Math.abs(long)并使用最低结果。

(创建一个类型为long[]的数组,将abs()值放入其中,然后使用Arrays.sort()对其进行排序。

顺便说一下,你可能只想做b.getTime()一次。

答案 2 :(得分:1)

long min = Long.MAX_VALUE;
long current = b.getTime();
int index = -1;
for(int i=0; i<a.length; i++) {
   long diff = Math.abs(current - a.getTime());
   if(diff < min) {
     min = diff;
     index = i;
   }
}