Как преобразовать значение из наносекунд в секунды?
Вот сегмент кода:
import java.io.*;
import java.util.concurrent.*;
..
class Stamper {
public static void main (String[] args) {
long start = System.nanoTime();
//some try with nested loops
long end = System.nanoTime();
long elapsedTime = end - start;
System.out.println("elapsed: " + elapsedTime + "nano seconds\n");
//convert to seconds
TimeUnit seconds = new TimeUnit();
System.out.println("which is " + seconds.toSeconds(elapsedTime) + " seconds");
}}
Ошибка
Stamper.java:16: enum types may not be instantiated.
Что это значит?
TimeUtil
, потому что этоenum
(перечислитель). Если вы хотите использоватьTimeUnit
, вы должны использоватьTimeUnit.NANOSECONDS.toSeconds(elapsedTime)
вместо этого. Удачи!Ответы:
Ну, вы можете просто разделить на 1 000 000 000:
Если вы используете
TimeUnit
преобразование, вы получите длинный результат, так что вы потеряете десятичную точность, но сохраните точность целых чисел.источник
convert()
иtoFoo()
все методы возвращаютlong
s теперь docs.oracle.com/javase/6/docs/api/java/util/concurrent/…TimeUnit
решение приводит к потере специфичности.TimeUnit.SECONDS.convert(500, TimeUnit.MILLISECONDS);
вернется0
, нет0.5
. Это просто зависит от вашего варианта использования, который из них предпочтительнее.double seconds = ((double) nanoseconds) / 1E9;
я бы делал это каждый раз как личное предпочтение.TimeUnit
EnumСледующее выражение использует
TimeUnit
enum (Java 5 и более поздние версии) для преобразования из наносекунд в секунды:источник
TimeUnit - это перечисление, поэтому вы не можете создать новый.
Следующее преобразует 1000000000000ns в секунды.
источник
Чтобы уменьшить многословность, вы можете использовать статический импорт:
-и впредь просто типа
источник
Вы должны написать:
Назначение endTime в переменной может вызвать несколько наносекунд. При таком подходе вы получите точное истекшее время.
А потом:
источник
Это преобразует время в секунды в двойном формате, который является более точным, чем целочисленное значение:
источник
JDK9 + решение с использованием java.time.Duration
https://docs.oracle.com/javase/9/docs/api/java/time/Duration.html#ofNanos-long-
https://docs.oracle.com/javase/9/docs/api/java/time/Duration.html#toSeconds--
источник