如何检查日期中的变量是否比当前日期早10秒

时间:2013-12-12 17:07:17

标签: java date time calendar

我有一些方法可以从互联网上下载数据(让我们称之为更新程序),并且由于一些不同的其他方法使用此updater(),我不想过度使用查询过度使用服务器。

我是这样做的:updater()结果的私有变量和lastUpdateDate类型)的私有变量,告诉我(使用Calendar class)当最后一个查询被保持时。

现在,当查询在最后10秒时,我想只返回旧结果。

问题是:我不知道如何从actualDatelastUpdate获取信息10秒。在Date课程中,只有after(Date d)before(Date d)equals(Object o)的方法。

有人可以帮助我吗?

4 个答案:

答案 0 :(得分:2)

我建议您删除Date,因为大部分都已弃用。而是使用Calendar(或类似Joda-Time的外部库)来获取日期功能。

另一种可能性是使用当前日期+时间(以毫秒为单位)。它非常易于使用,您可以使用Calendar轻松将其转换为setTimeInMillis()

样本可能是这样的:

private long lastTime = 0;

if(System.currentTimeMillis() >= lastTime + 10000) {
    // Perform action
    lastTime = System.currentTimeMillis();
}

答案 1 :(得分:1)

确保当前日期是第一个选项。 .getTime()方法以毫秒为单位返回时间,因此比较它们,10秒是一个超过10000的值

if (actualDate.getTime()-lastUpdate.getTime() >10000) {
  // more than 10 seconds have passed
}

答案 2 :(得分:1)

其他答案都是正确的。

但是你应该学会使用Joda-Time,或者在Java 8中使用新的JSR 310 java.time。*类。旧的java.util.Date/Calendar类非常糟糕。

以下是Joda-Time 2.3中的一些示例代码,可帮助您实现目标。

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;

DateTime lastChecked = new DateTime();

// …
try {
    System.out.println( "Sleeping. lastChecked: " + lastChecked );
    Thread.sleep( 12 * 1000 );  // Milliseconds.
} catch ( InterruptedException e ) {
    e.printStackTrace();
}

if ( DateTime.now().isAfter( lastChecked.plusSeconds( 10 ) )) {
    // Update
    System.out.println( "Updating." );
} else {
    // Wait.
    System.out.println( "Waiting." );
}

资源:

答案 3 :(得分:0)

Date.getTime(); 

这给出了自1970年1月以来毫秒时间内的纪元时间。您可以将您的日期转换为以毫秒为单位的时间,并比较差异以检查它是否超过10秒。