次の秒へのJavaインスタントラウンドアップ

ryanp102694:

Javaのインスタントクラスを使用して、どのように私は、最も近い秒に切り上げことができますか?私はそれが1ミリ秒、15ミリ秒、または999ミリ秒であれば、すべてが0ミリ秒で次の秒に切り上げなければならない気にしないでください。

私は基本的にしたいです、

Instant myInstant = ...

myInstant.truncatedTo(ChronoUnit.SECONDS);

しかし、反対方向に移動します。

Nexevis:

あなたは使ってコーナーケースをカバーすることができます.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ナノ秒である場合には切り捨て何も理由がないので、何も操作は、実行する必要がありません実証する声明。

EDIT:時間が1ナノ秒の代わりに、ラウンドアップするために、第2の上に、少なくとも1ミリ秒であるかどうかをチェックしたい場合は、1000000ナノ秒と比較したが残すことができる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.
    }

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=230235&siteId=1