تحويل النانو ثانية إلى ميلي ثانية ونيو ثانية <999999 في جافا

StackOverflow https://stackoverflow.com/questions/4300653

سؤال

أنا أتساءل ما هي الطريقة الأكثر دقة لتحويل قيمة نانو ثانية كبيرة هي إلى ميلي ثانية والنيانو ثانية ، مع الحد الأعلى على نانو ثانية من 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) {

        }
    }
}

هتاف ، كريس

هل كانت مفيدة؟

المحلول

فقط خذ divmod منه مع 1000000.

نصائح أخرى

لماذا لا تستخدم أساليب Java المدمجة. يعد TimeUnit جزءًا من الحزمة المتزامنة التي تم تصميمها تمامًا لتلبية احتياجاتك تمامًا

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

لتحويل أقصر من أي وقت مضى باستخدام java.util.concurrent.TimeUnit, ، أي ما يعادل ما كتبه شون أعلاه ، يمكنك استخدام:

    long durationInMs = TimeUnit.NANOSECONDS.toMillis(delayNS);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top