La conversión de nanosegundos a milisegundos y nanosegundos <999999 en Java
-
29-09-2019 - |
Pregunta
Me pregunto cuál es la forma más precisa de la conversión de un gran valor nanosegundos es milisegundos y nanosegundos, con un límite superior en los nanosegundos de 999999. El objetivo es combinar los nanosegundos y valores milisegundos para asegurar la máxima resolución posible con el límite dado. Esto es para la comparación con los métodos de sueño / de espera y alguna otra biblioteca externa que da un vistazo a los valores grandes de nanosegundos.
Edit: Mi código tiene el siguiente ahora:
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, Chris
Solución
Simplemente tome el DIVMOD de ella con 1,000,000.
Otros consejos
¿Por qué no utiliza el incorporado en los métodos de Java. El TimeUnit es parte del paquete de modo concurrente construida exactamente para sus necesidades
long durationInMs = TimeUnit.MILLISECONDS.convert(delayNS, TimeUnit.NANOSECONDS);
Para una conversión cada vez más cortos usando java.util.concurrent.TimeUnit
, equivalente a lo que Shawn escribió más arriba, puede utilizar:
long durationInMs = TimeUnit.NANOSECONDS.toMillis(delayNS);