Utilisation de la classe Java instantanée, comment puis-je arrondir à la seconde près? Je ne me soucie pas si elle est de 1 milliseconde, 15 millisecondes ou 999 millisecondes, tout devrait arrondir à la seconde suivante avec 0 millisecondes.
Je veux essentiellement,
Instant myInstant = ...
myInstant.truncatedTo(ChronoUnit.SECONDS);
mais dans la direction opposée.
Vous pouvez couvrir le cas d'angle à l'aide .getNano
pour vous assurer que le temps est pas exactement même sur la seconde, puis ajoutez la deuxième en utilisant .plusSeconds()
quand il y a une valeur à tronquer.
Instant myInstant = Instant.now();
if (myInstant.getNano() > 0) //Checks for any nanoseconds for the current second (this will almost always be true)
{
myInstant = myInstant.truncatedTo(ChronoUnit.SECONDS).plusSeconds(1);
}
/* else //Rare case where nanoseconds are exactly 0
{
myInstant = myInstant;
} */
Je suis parti dans la else
déclaration que vient de démontrer aucune opération doivent faire si elle est exactement 0 nanosecondes, parce qu'il n'y a aucune raison de ne rien troncature.
EDIT: Si vous voulez vérifier si le temps est d' au moins 1 milliseconde sur une seconde pour tour d' horizon, au lieu de 1 nanoseconde vous pouvez le comparer à 1000000 nanosecondes mais laisser la else
déclaration tronquer les nanosecondes:
Instant myInstant = Instant.now();
if (myInstant.getNano() > 1000000) //Nano to milliseconds
{
myInstant = myInstant.truncatedTo(ChronoUnit.SECONDS).plusSeconds(1);
}
else
{
myInstant = myInstant.truncatedTo(ChronoUnit.SECONDS); //Must truncate the nanoseconds off since we are comparing to milliseconds now.
}