経過時間を測定するだけか、比較する将来の時間を設定するかによって、2つのアプローチをとることができます。
最初はSourabhSaldiの答えに似ており、
long prevEventTime = System.currentTimeMillis();
次に、差が300000を超えるまで、System.currentTimeMillis()と比較します。
おっしゃるように、サーバーからのタイムスタンプは1970年1月1日からのミリ秒単位です。これは、System.currentTimeMillis()と直接比較できることを意味します。そのため、以下を使用します。
long serverTimeStamp=//whatever your server timestamp is, however you are getting it.
//You may have to use Long.parseLong(serverTimestampString) to convert it from a string
//3000(millliseconds in a second)*60(seconds in a minute)*5(number of minutes)=300000
if (Math.abs(serverTimeStamp-System.currentTimeMillis())>300000){
//server timestamp is within 5 minutes of current system time
} else {
//server is not within 5 minutes of current system time
}
もう1つのメソッドは、すでに実行していることに近いように見えます。Dateクラスを使用して、現在の時刻と比較された時刻を保存します。これらを使用するには、GregorianCalendarクラスを使用してこれらを処理する必要があります。呼び出し
calendar=new GregorianCalendar();
新しいカレンダーを作成し、その日付を現在のシステム時刻に自動的に設定します。また、GregorianCalendarクラスで提供されるすべての関数を使用して、次の形式を使用して時間を前後にロールすることもできます。
calendar.add(GregorianCalendar.MINUTE, 5);
または、それをDateオブジェクトの時刻に設定します
calendar.setTime(date);
あなたの場合、GregorianCalendarクラスとDateクラスの両方にafter()メソッドを持たせたい柔軟性に応じて、おそらく次のようなものが必要になります。
どこかに作成:
Date currentDate=newDate();
次に、アラームポイントを設定します。
calendar=new GregorianCalendar(); //this initialises to the current system time
calendar.setTimeInMillis(<server timestamp>); //change to whatever the long timestamp value from your server is
calendar.add(GregorianCalendar.MINUTE, 5); //set a time 5 minutes after the timestamp
Date beforeThisDate = calendar.getTime();
calendar.add(GregorianCalendar.MINUTE, -10); //set a time 5 minutes before the timestamp
Date afterThisDate = calendar.getTime();
次に、現在の時刻が設定されたアラームポイントを過ぎているかどうかを確認します。
currentDate.setTime(System.currentTimeMillis());
if ((currentDate.before(beforeThisDate))&&(currentDate.after(afterThisDate))){
//do stuff, current time is within the two dates (5 mins either side of the server timestamp)
} else {
//current time is not within the two dates
}
このアプローチは少し時間がかかるように思われるかもしれませんが、非常に堅牢で柔軟性があり、将来のアラームポイントを設定するために簡単に拡張したり、GregorianCalendarメソッドを使用して日付、時間、日、週を簡単に設定したりできます。未来へ。