2011-01-23-12.31.45形式で外部ソースからアプリケーションにタイムスタンプを渡しました。私はそれを現在のシステムのタイムスタンプと比較して、2分以内の違いを確認する必要があります。どのようにこれを達成するための任意のアイデア?Javaタイムスタンプの比較
4
A
答えて
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);
}
}
関連する問題
- 1. Java比較日
は静的 'SimpleDateFormat'に注意してください - それはスレッドセーフではありません。 – Bozho
そう、私はこれをかなり速く書いた。これを達成する方法の一つを考えようとしています。私はあなたの答えに投票しました。スレッドセーフティのためのjoda時間とほとんど同じ考えです。 – blong824