Как получить значимый результат от вычитания 2 объектов nanoTime?

Я создал фильтр, который отслеживает длину запроса.

long start = System.nanoTime();

...

long end = System.nanoTime();

Как я могу получить количество миллисекунд из этого сейчас?

Ответ 1

(end - start) / 1000000

1 микросекунд = 1000 наносекунд

1 миллисекунда = 1000 мкс

Обратите внимание, что результат будет округлен, но вы, как правило, не получите истинной точности наносекунды (точность зависит от ОС). Из Javadoc на nanoTime():

Этот метод обеспечивает наносекундную точность, но не      обязательно наносекундную точность.

Ответ 2

Также обратите внимание, что вы можете использовать класс TimeUnit для помощи при преобразовании. В более старых версиях Java следующий код может быть примером для преобразования времени обработки в другой формат времени:

long startTime = System.nanoTime();

//Processing in-between.

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

Обратите внимание, что более новые версии Java имеют ярлыки в классе TimeUnit.

Вышеприведенный образец превратит наносекунды в считанные секунды. Также обратите внимание, что это усекает его, поэтому вы теряете определенную точность. Поэтому, если вы переключитесь на минуты, вы потеряете точность секунд. Если вы хотите получить результат "12 минут и 32 секунды", вам нужно будет продолжить обработку с помощью этого решения.

Ответ 3

Просто вычтите их и разделите результат на 10 ^ 6.

1 наносекунда составляет 10 ^ -9 секунд и, соответственно, 10 ^ -6 миллисекунд.
http://en.wikipedia.org/wiki/Nano-

Ответ 4

Чтобы получить осмысленный результат:

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 ) ;
}

Ответ 5

TimeUnit.NANOSECONDS.toMillis(end - start);

Что все!

Ответ 6

Вы можете просто использовать System.currentTimeMillis().

Протест:

Обратите внимание, что хотя единица времени возвращаемого значения равна миллисекунде, степень детализации зависит от базовой операционной системы и может быть больше. Например, многие операционные системы измеряют время в единицах десятков миллисекунд.