我有一些从互联网下载数据的方法(让我们称之为更新器),而且由于其他几种不同的方法使用这个updater(),我不想让服务器上充斥着查询。
我是这样做的:updater()结果的私有变量和lastUpdate的私有变量(Date类型)告诉我(使用Calendar类)上次查询何时举行。
现在,当查询在最后10秒时,我只想返回旧的结果。
问题是:我不知道如何从actualDate和lastUpdate获得10秒的信息。在Date类中,只有after(Date d)、before(Date d)或equals(Object o)的方法。
有人能帮我吗?
发布于 2013-12-12 17:13:23
我建议您放弃Date,因为其中大多数都是不推荐的。相反,使用Calendar (或者像尤达-时间这样的外部库)来实现日期功能。
另一种可能是只使用当前的日期+时间(毫秒)。它非常容易使用,您可以使用setTimeInMillis()轻松地将其转换为setTimeInMillis()。
样本可以是这样的:
private long lastTime = 0;
if(System.currentTimeMillis() >= lastTime + 10000) {
// Perform action
lastTime = System.currentTimeMillis();
}发布于 2013-12-12 17:12:02
确保当前日期是第一个选项。.getTime()方法返回以毫秒为单位的时间,因此比较它们,10秒的值大于10000
if (actualDate.getTime()-lastUpdate.getTime() >10000) {
// more than 10 seconds have passed
}发布于 2013-12-12 17:58:23
其他答案是正确的。
但是您应该学会使用尤达-时间,或者在Java8中学习新的JSR310java.time.*类。旧的java.util.Date/Calendar类非常糟糕。
以下是Joda-Time2.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() on DateTime,替代new DateTime()。https://stackoverflow.com/questions/20549697
复制相似问题