在Java中,纳秒到毫秒和纳秒的转换< 999999

2022-09-01 07:55:04

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

        }
    }
}

干杯,克里斯


答案 1

为什么不使用内置的Java方法。TimeUnit 是并发包的一部分,因此完全根据您的需求而构建

  long durationInMs = TimeUnit.MILLISECONDS.convert(delayNS, TimeUnit.NANOSECONDS);

答案 2

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

    long durationInMs = TimeUnit.NANOSECONDS.toMillis(delayNS);

推荐