我有一些方法可以从互联网上下载数据(让我们称之为更新程序),并且由于一些不同的其他方法使用此updater()
,我不想过度使用查询过度使用服务器。
我是这样做的:updater()
结果的私有变量和lastUpdate
(Date
类型)的私有变量,告诉我(使用Calendar
class)当最后一个查询被保持时。
现在,当查询在最后10秒时,我想只返回旧结果。
问题是:我不知道如何从actualDate
和lastUpdate
获取信息10秒。在Date
课程中,只有after(Date d)
,before(Date d)
或equals(Object o)
的方法。
有人可以帮助我吗?
答案 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." );
}
资源:
now()
上的静态方法DateTime,替代new DateTime()
。答案 3 :(得分:0)
Date.getTime();
这给出了自1970年1月以来毫秒时间内的纪元时间。您可以将您的日期转换为以毫秒为单位的时间,并比较差异以检查它是否超过10秒。