我有帶有TIMESTAMP欄位的postgresql ,它有帶有日期和時間的 Instant。例如:2021-10-13T15:04:24.944921Z。
如您所見,逗號-后有 6 位數字944921。但是如果我有更多的數字,例如:2021-10-13T07:14:47.791616921Z. 我怎樣才能正確地舍入Instant到2021-10-13T07:14:47.791617Z?
uj5u.com熱心網友回復:
代碼很短,但需要一些解釋。你是對的,我們擁有的最好的是truncatedTo方法,它總是向下取整。相反,我們希望半了四舍五入,我們在學校學到:如果第7小數等于或小于4,本輪下跌。如果是 5 或更高,則向上取整。
為了獲得這個,我首先添加 500 納秒。然后截斷。如果第 7 位小數是 4 或更少,它仍然是 9 或更少,所以它之前的數字沒有改變,截斷會做我們想要的四舍五入。如果第 7 位小數為 5 或更多,則增加 500 納秒將使其溢位,第 6 位小數將增加 1,第 7 位小數將在 0 到 4 范圍內結束。然后截斷將有效地對我們想要的原始值進行四舍五入。
Instant sourceValue = Instant.parse("2021-10-13T07:14:47.791616921Z");
Instant rounded = sourceValue.plusNanos(500).truncatedTo(ChronoUnit.MICROS);
System.out.println(rounded);
輸出是所需的:
2021-10-13T07:14:47.791617Z
讓我們也嘗試一下邊緣情況。
Instant sourceValue = Instant.parse("2021-10-13T07:14:00.000000499Z");
2021-10-13T07:14:00Z
Instant sourceValue = Instant.parse("2021-10-13T07:14:59.999999500Z");
2021-10-13T07:15:00Z
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/321376.html
標籤:爪哇 约会时间 时间戳 四舍五入 java.time.instant
