2011-03-28 218 views
4

我有一個時間戳從外部源傳遞給我的應用程序2011-01-23-12.31.45格式。我需要將它與當前系統時間戳進行比較,確保其不足2分鐘的差異。任何想法如何實現這一目標?Java時間戳比較

回答

5

這是一個日期,而不是時間戳。你可以把它用java.text.SimpleDateFormat,使用yyyy-dd-MM-HH.mm.ss格式解析:

SimpleDateFormat sdf = new SimpleDateFormat("yyy-dd-MM-HH.mm.ss"); 
Date date = sdf.parse(inputDateString); 
long timestamp = date.getTime(); 

,然後比較 - 一分鐘有60個* 1000米利斯。

使用joda-time日期時操作始終是首選 - 它會:

  • 有DATAFORMAT的線程安全的實現 - DateTimeFormat(上面的那個不是線程安全的)
  • 簡單地做Minutes.minutesBetween(..)找出兩個時刻之間的分鐘,而不是計算。
0

那麼這可以優化,但這是我想出的。它需要一些工作,但它應該讓你開始。

public class Test { 

private final String serverValue = "2011-01-23-12.31.45"; //Old should fail 
private final String serverValueNew = "2011-03-28-14.02.00"; //New 

private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss"); 


public boolean plusMinusTwoMins(String serverValue) { 
    boolean withinRange = false; 
    Date now = Calendar.getInstance().getTime(); 
    Date serverDate = now; 

    try { 
     serverDate = dateFormat.parse(serverValue); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    long millis = Math.abs(now.getTime() - serverDate.getTime()); 
    System.out.println("Millis: " + millis); 

    //1000ms * 60s * 2m 
    if (millis <= (1000 * 60 * 2)) { 
     withinRange = true; 
    } 

    return withinRange; 
} 

public static void main(String[] args) { 
    Test test = new Test(); 
    boolean value = test.plusMinusTwoMins(test.serverValue); 
    System.out.println("Value: " + value); 
    boolean value2 = test.plusMinusTwoMins(test.serverValueNew); 
    System.out.println("Value2: " + value2); 
} 

}

+0

小心靜電'SimpleDateFormat' - 這不是線程安全的。 – Bozho 2011-03-28 21:11:48

+0

是的,我寫得很快。只是試圖想出一個方法來實現這一點。我投了你的答案。幾乎相同的想法,但用線程安全的喬達時間。 – blong824 2011-03-28 21:13:19