在Java中将纳秒转换为毫秒和纳秒<999999

Chr*_*ett 25 java time milliseconds nanotime

我想知道转换大纳秒值的最准确方法是毫秒和纳秒,纳秒的上限为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) {

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

干杯,克里斯

Sha*_*der 86

为什么不使用内置的Java方法.TimeUnit是并发包的一部分,因此可以根据您的需要进行构建

  long durationInMs = TimeUnit.MILLISECONDS.convert(delayNS, TimeUnit.NANOSECONDS);
Run Code Online (Sandbox Code Playgroud)

  • 如果使用例如999999纳秒,则此方法截断为0 (6认同)

Ibr*_*ief 76

对于更短的转换使用java.util.concurrent.TimeUnit,相当于Shawn上面写的,您可以使用:

    long durationInMs = TimeUnit.NANOSECONDS.toMillis(delayNS);
Run Code Online (Sandbox Code Playgroud)

  • 正如其他人提到的,这会截断结果。所以 3.9999 就是 3 (5认同)

Ign*_*ams 24

只需要1000000的divmod.

  • "n"的整数模数总是会得到一个余数,其上限为"n - 1". (3认同)
  • 数学是正确的.检查不是绝对必要的,它闻起来像一个神奇的数字. (2认同)