2011-03-28 176 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