web-dev-qa-db-fra.com

Conversion de nanosecondes en millisecondes et nanosecondes <999999 en Java

Je me demande quel est le moyen le plus précis de convertir une grande valeur en nanosecondes en millisecondes et nanosecondes, avec une limite supérieure sur les nanosecondes de 999999. Le but est de combiner les valeurs en nanosecondes et millisecondes pour assurer la résolution maximale possible avec la limite donné. C'est pour la comparabilité avec les méthodes sleep/wait et une autre bibliothèque externe qui donne de grandes valeurs en nanosecondes.

Edit: mon code ressemble maintenant à ceci:

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) {

        }
    }
}

À la vôtre, Chris

25
Chris Dennett

Prenez simplement le divmod avec 1000000.

24

Pourquoi ne pas utiliser les méthodes intégrées Java. La TimeUnit fait partie du package simultané, donc construit exactement pour vos besoins

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

Pour une conversion toujours plus courte en utilisant Java.util.concurrent.TimeUnit, équivalent à ce que Shawn a écrit ci-dessus, vous pouvez utiliser:

    long durationInMs = TimeUnit.NANOSECONDS.toMillis(delayNS);
76
Ibrahim Arief