تحويل النانو ثانية إلى ميلي ثانية ونيو ثانية <999999 في جافا
-
29-09-2019 - |
سؤال
أنا أتساءل ما هي الطريقة الأكثر دقة لتحويل قيمة نانو ثانية كبيرة هي إلى ميلي ثانية والنيانو ثانية ، مع الحد الأعلى على نانو ثانية من 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);
لا تنتمي إلى StackOverflow