Преобразование наносекунд в миллисекунды и наносекунды <999999 в Java - PullRequest
21 голосов
/ 29 ноября 2010

Мне интересно, какой самый точный способ преобразования большого значения наносекунд в миллисекунды и наносекунды с верхним пределом для наносекунд 999999. Цель состоит в том, чтобы объединить значения наносекунд и миллисекунд, чтобы обеспечить максимально возможное разрешениес указанным пределом.Это для сопоставимости с методами сна / ожидания и некоторой другой внешней библиотекой, которая выдает большие значения наносекунд.

Редактировать: мой код теперь выглядит следующим образом:

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, Крис

Ответы [ 3 ]

82 голосов
/ 06 февраля 2014

Почему бы не использовать встроенные методы Java.TimeUnit является частью параллельного пакета, созданного именно для вас

  long durationInMs = TimeUnit.MILLISECONDS.convert(delayNS, TimeUnit.NANOSECONDS);
71 голосов
/ 24 ноября 2014

Для еще более короткого преобразования с использованием java.util.concurrent.TimeUnit, эквивалентного тому, что написал Шон выше, вы можете использовать:

    long durationInMs = TimeUnit.NANOSECONDS.toMillis(delayNS);
24 голосов
/ 29 ноября 2010

Просто возьмите его с 1000000.

...