为什么这个时间差总是0?基本上start
和end
始终具有相同的值。我尝试过使用Calendar
代替Date
。如果我使用Duration
代替日期,我无法比较boolean temp = (diff>500);
。
private Date now=new Date();
private long start;
private long end;
public void ABC(){
start = now.getTime();
...
...
...
...
end = now.getTime();
long diff = end - start;
boolean temp = (diff>500);
System.out.println(diff); //This always outputs 0, basically start and end have same value always
}
答案 0 :(得分:4)
因为它的日期相同。 now = new Date()
将日期设置为当前日期。 .getTime()
只是将日期转换为long
。
据我所知,您希望获得两个变量的当前日期,因此您应该使用:
start = new Date().getTime();
end = new Date().getTime();
答案 1 :(得分:1)
Java中的类Date
有一个默认构造函数,它分配一个Date对象并对其进行初始化。
因此,在您的代码中,您已按照以下步骤初始化了它。
private Date now=new Date();
因此,每次调用now.getTime()
时,它都只返回在开始时初始化的值。
这意味着在您的情况下,start
和end
都具有相同的值。
所以总是dff为0
要避免这种情况,您需要创建Date类的新对象:
start = new Date().getTime();
end = new Date().getTime();
答案 2 :(得分:1)
当然,如果您愿意,可以使用java.time.Duration
。
Instant start = Instant.now();
// ...
Instant end = Instant.now();
Duration diff = Duration.between(start, end);
boolean temp = diff.toMillis() > 500;
我同意Andy Turner’s comment,但为了您的目的,您无需实例化任何对象,System.currentTimeMillis()
就足够了。