Java How to get the difference between currentMill

2019-08-11 11:41发布

问题:

Lets say i have long currentMillis and long oldMillis. The difference between the two timestamps is very tiny and always less than 1 second.

If i want to know the difference between the timestamps in milleseconds, i can do the following:

long difference = currentmillis-oldmillis;

And if i want to convert difference to seconds, i can just divide it by 1000. However if the difference in milliseconds is less than 1000 milliseconds(<1 second), dividing it by 1000 will result in 0.

How can i get the difference between the two timestamps if the difference is less than a second? For example, if the difference is 500 milliseconds, the desired output is 0.5 seconds.

Using float/double instead of long always returns 0.0 for some reason i don't understand.

My code:

private long oldmillis = 0, difference = 0;

private long calculateDifference()
{
 long currentMillis = System.currentTimeMillis();

        if (oldMillis == 0) oldMillis = currentMillis;
        difference = currentMillis - oldMillis;
        oldMillis = currentMillis;

return difference;
}

The method calculateDifference is called randomly with a small random time interval.

回答1:

It sounds like you just need to convert the results into double before the division:

// This will work
double differenceMillis = currentMillis - oldMillis;
double differenceSeconds = differenceMillis / 1000;

// This will *not* work
double differenceSecondsBroken = (currentMillis - oldMillis) / 1000;

In the latter code, the division is performed using integer arithmetic, so you'll end up with a result of 0 that is then converted to a double.

An alternative which would work is to divide by 1000.0, which would force the arithmetic to be done using floating point:

double differenceSeconds = (currentMillis - oldMillis) / 1000.0;