使用Java Instant类,如何舍入到最接近的秒?我不在乎是1毫秒,15毫秒还是999毫秒,所有数值都应该以0毫秒舍入到下一秒。
我基本上想要
Instant myInstant = ...
myInstant.truncatedTo(ChronoUnit.SECONDS);
但方向相反。
最佳答案
您可以通过使用.getNano
来确保拐角处的时间不完全相等,以解决特殊情况,然后在有要截断的值时使用.plusSeconds()
添加额外的第二个时间。
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;
} */
我留在
else
语句中只是为了演示如果恰好是0纳秒,则无需执行任何操作,因为没有理由截断任何内容。编辑:如果要检查时间是否至少为1毫秒而不是1纳秒,则可以将其与1000000纳秒进行比较,而不是1纳秒,但是可以将
else
语句保留为截短纳秒的时间: 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.
}