Нано и миллисекунды

1
    long startTime = System.nanoTime();
    long startTimer = System.currentTimeMillis();

    M = app.decriptare_simpla(C);

    long endTime = System.nanoTime();
    long stopTimer = System.currentTimeMillis();

    //mesajul initial dupa decriptare
    System.out.println("M : " + M.toString());
    System.out.println("Decriptarea a durat: " + (endTime - startTime));
    System.out.println("Decriptarea a durat: " + (stopTimer - startTimer));

Это дало мне:

Decriptarea a durat: 14811776
Decriptarea a durat: 15

Я хочу спросить, сколько из этих двух чисел? Я имею в виду, они, 0,15, 0,015, 0,0015...? Я бы хотел напечатать их таким образом, а не long но не знаю, сколько десятичных знаков добавить. Тот же вопрос для другого номера.

  • 0
    одна секунда = 1000 миллисекунд = 1 000 000 микросекунд = 1 000 000 000 наносекунд
  • 0
    Обратитесь к Википедии или где-либо еще для определения milli- и nano- префиксов. Ява не изобрел их.
Показать ещё 3 комментария
Теги:
time
nanotime

2 ответа

2
Лучший ответ

Переходы следуют обычным правилам для стандартных единиц СИ:

long nanoSeconds = ...
double microSeconds = nanoSeconds / 1e3;
double milliSeconds = microSeconds / 1e3;
double seconds = milliSeconds / 1e3;

// Shortcuts:
double milliSeconds = nanoSeconds / 1e6;
double sconds = nanoSeconds / 1e9;

Для некоторых преобразований вы также можете взглянуть на класс TimeUnit: он позволяет конвертировать значения между разными единицами времени, например

long microSeconds = NANOSECONDS.toMicros(nanoSeconds);

Однако, к сожалению, это не позволяет использовать промежутки времени в double точности, но только в виде long значений.


В стороне, также упоминается в комментариях: Измерение временных интервалов в порядке 10-15 мс обычно не имеет смысла из-за ограниченного разрешения внутреннего таймера.

  • 0
    Так что я должен просто использовать System.time.millis вместо nano?
  • 0
    Это зависит от вашей системы. Я был бы удивлен, если бы у большинства компьютеров общего назначения были часы, которые точно измеряли наносекунды, и на самом деле большинство машин в стиле ПК использовали тик только с интервалами в 10 миллисекунд. Имейте в виду также, что наносекунды будут переполняться долго и намного быстрее.
Показать ещё 1 комментарий
0

Вы пробовали это

System.out.println(TimeUnit.SECONDS.convert((endTime - startTime), TimeUnit.NANOSECONDS));
System.out.println(TimeUnit.SECONDS.convert((stopTimer - startTimer), TimeUnit.MILLISECONDS));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню