6

2 つのタイムスタンプを比較したいのですが、その差が (-+5 分) の場合は、アラート ダイアログを表示したいと考えています。

つまり、現在時計が午後 4 時である場合、2 回目は午後 4 時 5 分または午後 3 時 55 分であり、それ以外の場合はアラートが表示されます。

どうすればこれを解決できるか教えてもらえますか??

timeStamp を取得する関数と 2 つのタイムスタンプを比較する方法を検索した後、このタイプの条件に対してメソッドまたは関数はありますか?

ありがとう。

私のコードは次のとおりです:-

date= new Date();
currentTime = date.getTime();
if(currentTime !=0 && previousTime !=0){
   String result = (String) DateUtils.getRelativeTimeSpanString(currentTime, previousTime, 0);
 }

そして、私は現在の時間を以前の時間に保存しています:-

if(currentTime != previousTime){
    previousTime = currentTime;
}
4

5 に答える 5

12

経過時間を測定するだけか、比較する将来の時間を設定するかによって、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メソッドを使用して日付、時間、日、週を簡単に設定したりできます。未来へ。

于 2012-08-28T10:04:51.780 に答える
5

ちょうどどうですか:

private static final long FIVE_MINUTES = 1000 * 60 * 5; //5 minutes in milliseconds

long currentTime = new Date().getTime();
long previousTime = mPreviousTime;
long differ = (currentTime - previousTime);

if (differ < FIVE_MINUTES && differ > -FIVE_MINUTES ){
  // under +/-5 minutes, do the work
}else{
  // over 5 minutes
}
于 2012-08-28T09:45:36.160 に答える
1
 long etime = 0;
final long time1 = uptimeMillis();
/* do something */
final long time2 = uptimeMillis();
if (time2 < time1) {
    etime = Long.MAX_VALUE - time1 + time2;
} else {
    etime = time2 - time1;
}

次に、この etime を確認し、必要に応じて実行してください!!1

于 2012-08-28T09:43:35.600 に答える
0

次のメソッドを使用して、日付をエポック形式で変更します

public Long getChnagedDate(Activity act,String date) throws ParseException
{
      long epoch = new java.text.SimpleDateFormat ("MM/dd/yyyy HH:mm:ss aa").parse(date).getTime();
      return epoch/1000;
}

http://www.epochconverter.comで違いを確認した後。お役に立てば幸いです。

于 2012-08-28T09:49:51.357 に答える
-1

Joda time は、この作業に役立ちます。

import org.joda.time.Interval;

http://joda-time.sourceforge.net/

于 2012-08-28T09:41:28.597 に答える