为什么我总是得到零的时差?

时间:2017-11-20 09:42:02

标签: java date time calendar

为什么这个时间差总是0?基本上startend始终具有相同的值。我尝试过使用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
}

3 个答案:

答案 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()时,它都只返回在开始时初始化的值。

这意味着在您的情况下,startend都具有相同的值。

所以总是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()就足够了。