Java How to get the difference between currentMillis and a timestamp in the past in seconds

梦想与她 提交于 2019-12-24 16:19:40

问题


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;


来源:https://stackoverflow.com/questions/24168492/java-how-to-get-the-difference-between-currentmillis-and-a-timestamp-in-the-past

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!