2013-12-12 76 views
0

我有一些方法可以從互聯網上下載數據(我們稱之爲更新程序),並且由於其他一些方法使用此方法,我不知道不想用查詢讓服務器過度擁擠。如何檢查日期變量是否比當前日期早10秒以上

我做了這樣的:的updater()結果的私有變量和lastUpdateDate類型)的私有變量,告訴我(使用Calendar類)舉行最後一次查詢時。

現在,當查詢處於最後10秒時,我只想返回舊結果。

問題是:我不知道如何獲得從actualDatelastUpdate經過10秒鐘後的信息。在Date類中,只有after(Date d),before(Date d)equals(Object o)的方法。

有人可以幫助我嗎?

回答

2

我建議你放棄Date,因爲它大部分已被棄用。請使用Calendar(或外部庫,如Joda-Time)來獲取日期功能。

另一種可能性是僅使用當前日期+時間(以毫秒爲單位)。它使用起來非常簡單,您可以使用setTimeInMillis()將其轉換爲Calendar

的樣本可能是這樣的:

private long lastTime = 0; 

if(System.currentTimeMillis() >= lastTime + 10000) { 
    // Perform action 
    lastTime = System.currentTimeMillis(); 
} 
+1

謝謝!我喜歡這個解決方案。 :) – user2202284

1

確保當前日期是第一個選項。所述.getTime()方法返回以毫秒爲單位的時間,所以比較它們10秒是超過10000

if (actualDate.getTime()-lastUpdate.getTime() >10000) { 
    // more than 10 seconds have passed 
} 
+0

謝謝你的幫忙! – user2202284

0
Date.getTime(); 

的值這使信號出現時間作爲自1970年以來在揚毫秒的時間。您可以將您的日期轉換爲以毫秒爲單位的時間,並比較差異以檢查它是否超過10秒。

1

其他的答案是正確的。

但是,您應該學會使用Joda-Time,或者在Java 8中使用新的JSR 310 java.time。*類。舊的java.util.Date/Calendar類非常糟糕。

下面是Joda-Time 2.3中的一些示例代碼,以幫助您解決問題。

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so. 
// import org.joda.time.*; 
// import org.joda.time.format.*; 

DateTime lastChecked = new DateTime(); 

// … 
try { 
    System.out.println("Sleeping. lastChecked: " + lastChecked); 
    Thread.sleep(12 * 1000); // Milliseconds. 
} catch (InterruptedException e) { 
    e.printStackTrace(); 
} 

if (DateTime.now().isAfter(lastChecked.plusSeconds(10))) { 
    // Update 
    System.out.println("Updating."); 
} else { 
    // Wait. 
    System.out.println("Waiting."); 
} 

資源:

相關問題