How to get a meaningful result from subtracting 2

2019-03-12 22:25发布

I created a filter that monitors the length of a request.

long start = System.nanoTime();

...

long end = System.nanoTime();

How can I get the number of milliseconds from this now?

6条回答
放荡不羁爱自由
2楼-- · 2019-03-12 23:07
(end - start) / 1000000

1 microsecond = 1000 nanoseconds

1 millisecond = 1000 microseconds

Note, that the result will be rounded down, but you usually don't get true nanosecond accuracy anyway (accuracy depends on the OS). From the Javadoc on nanoTime():

This method provides nanosecond precision, but not necessarily nanosecond accuracy.

查看更多
闹够了就滚
3楼-- · 2019-03-12 23:14

Just subtract them and divide result by 10^6.

1 nanosecond is 10^-9 seconds and, correspondingly, 10^-6 milliseconds.
http://en.wikipedia.org/wiki/Nano-

查看更多
啃猪蹄的小仙女
4楼-- · 2019-03-12 23:15

You could just use System.currentTimeMillis().

Caveat:

Note that while the unit of time of the return value is a millisecond, the granularity of the value depends on the underlying operating system and may be larger. For example, many operating systems measure time in units of tens of milliseconds.

查看更多
We Are One
5楼-- · 2019-03-12 23:27

To get a meaningful result:

void procedure ( ... )
{
     ...
}

double measureProcedure ( double epsilon , ... )
{
    double mean ;
    double stderr = 2 * epsilon ;
    while ( stderr > epsilon )
    {
         long start = System.nanoTime();
         procedure ( ... ) ;
         long end = System.nanoTime();
         // recalculate mean , stderr 
    }
    return ( mean / 1000000 ) ;
}
查看更多
干净又极端
6楼-- · 2019-03-12 23:28

Also note that you can use the TimeUnit class to help with conversion. With older versions of Java, the following code might be an example to transform a processing time into some other time format:

long startTime = System.nanoTime();

//Processing in-between.

long endTime = System.nanoTime();
long duration = endTime - startTime;
duration = TimeUnit.SECONDS.convert(duration, TimeUnit.NANOSECONDS);

Note that newer versions of Java have shortcuts in the TimeUnit class.

The above sample will turn nanoseconds long into seconds. Also note that this truncates it so you do lose some precision. Therefore, if you switch to minutes then you will lose the precision of seconds. If you want to get a result of "12 minutes and 32 seconds" then you would have to do further processing with this solution.

查看更多
狗以群分
7楼-- · 2019-03-12 23:28
TimeUnit.NANOSECONDS.toMillis(end - start);

That's all!

查看更多
登录 后发表回答