2011-03-28 29 views
4

2011-01-23-12.31.45形式で外部ソースからアプリケーションにタイムスタンプを渡しました。私はそれを現在のシステムのタイムスタンプと比較して、2分以内の違いを確認する必要があります。どのようにこれを達成するための任意のアイデア?Javaタイムスタンプの比較

答えて

5

これはタイムスタンプではなく、日付です。

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

をそして比較 - 分は、60×1000ミリ秒を持っている:あなたはそれがyyyy-dd-MM-HH.mm.ss形式を使用して、java.text.SimpleDateFormatを使用して解析することができます。日時操作用joda-timeを使用して

が常に優先される - それはします:

  • は、データ形式のスレッドセーフな実装を持っている - DateTimeFormat(上記の1がスレッドセーフではありません)
  • は、単純にやりますMinutes.minutesBetween(..)を使用して、計算するのではなく、2つの瞬間間の分を調べます。
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

+0

そう、私はこれをかなり速く書いた。これを達成する方法の一つを考えようとしています。私はあなたの答えに投票しました。スレッドセーフティのためのjoda時間とほとんど同じ考えです。 – blong824