6

我想比较两个时间戳,如果差是(-+5 分钟),那么我想显示警报对话框。

即如果当前在我们的手表下午 4 点,第二次是 4.05PM 或 3.55PM,则警报将显示,否则不显示。

谁能建议我如何解决这个问题??

我在搜索后发现了获取时间戳的功能以及如何比较两个时间戳,但是对于这种情况,有什么方法或功能吗?

谢谢。

我的代码是:-

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

您可以采用两种方法,具体取决于您是只想测量经过的时间,还是想设置未来的时间进行比较。

第一个类似于Sourabh Saldi的答案,记录结果来自

long prevEventTime = System.currentTimeMillis();

然后与 System.currentTimeMillis() 比较,直到相差超过 300000

正如您所提到的,您来自服务器的时间戳是自 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
}

另一种方法看起来更接近您已经在做的 - 使用 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 回答