簡體   English   中英

java毫秒查找最接近當前時間

[英]java milliseconds find closest to current time

我有以下代碼:

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

只需保持差異的絕對值 (使用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具有最小差異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;
    }
}

對每個結果進行Math.abs(long)並使用最低的結果。

(創建一個long[]類型的數組,將abs()值放入其中,然后使用Arrays.sort()對其進行Arrays.sort()

順便說一句,您可能只想做一次b.getTime()

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;
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM