Ответ 1
Просто возьмите divmod из этого с 1000000.
Мне интересно, какой самый точный способ преобразования большой наносекундной ценности - миллисекунды и наносекунды с верхним пределом наносекунд 999999. Цель состоит в объединении значений наносекунд и миллисекунд, чтобы обеспечить максимально возможное разрешение с заданным пределом. Это для сопоставимости с методами sleep/wait и некоторой другой внешней библиотекой, которая дает большие наносекундные значения.
Изменить: теперь мой код выглядит следующим образом:
while (hasNS3Events()) {
long delayNS = getNS3EventTSDelay();
long delayMS = 0;
if (delayNS <= 0) runOneNS3Event();
else {
try {
if (delayNS > 999999) {
delayMS = delayNS / 1000000;
delayNS = delayNS % 1000000;
}
EVTLOCK.wait(delayMS, (int)delayNS);
} catch (InterruptedException e) {
}
}
}
Cheers, Крис
Просто возьмите divmod из этого с 1000000.
Почему бы не использовать встроенные методы Java. TimeUnit является частью параллельного пакета, построенного именно для вас.
long durationInMs = TimeUnit.MILLISECONDS.convert(delayNS, TimeUnit.NANOSECONDS);
Для более короткого преобразования с использованием java.util.concurrent.TimeUnit
, эквивалентного тому, что написал Шон выше, вы можете использовать:
long durationInMs = TimeUnit.NANOSECONDS.toMillis(delayNS);