Jor*_*kie 4 java date localtime java-8 java-time
当从LocalTime对象中减去给定量时,我意识到可能发生上溢/下溢.
例:
00:30 - 35 minutes = 23:55
23:30 + 35 minutes = 00:05
Run Code Online (Sandbox Code Playgroud)
对于我的应用程序,我想锁定时间,以便上面会00:00
在下溢和23:59
溢出时生成.
这可能吗?
我的建议是:
LocalTime orig = LocalTime.of(0, 30);
int minutesToSubtract = 35;
long minutesSinceMidnight = ChronoUnit.MINUTES.between(LocalTime.MIN, orig);
LocalTime result;
if (minutesToSubtract > minutesSinceMidnight) {
// Subtracting the minutes will pass midnight at start of day
result = LocalTime.MIN;
} else {
// Normal case, no underflow
result = orig.minusMinutes(minutesToSubtract);
}
System.out.println(result);
Run Code Online (Sandbox Code Playgroud)
以上假设minutesToSubtract
是非负面的.如果可能出现负数,则需要检查下溢和溢出.
检查溢出(超过23:59:59.999999999
)的情况类似.使用LocalTime.MAX
了一天的结束.
编辑: JB Nizet的评论中其他操作的代码值得正确的代码格式化,所以我在这里粘贴它:
public static LocalTime addWithoutOverflow(LocalTime baseTime, int minutes) {
LocalTime maxTime = LocalTime.MAX;
long maxNanos = ChronoUnit.NANOS.between(baseTime, maxTime);
long nanos = Duration.ofMinutes(minutes).toNanos();
return baseTime.plusNanos(Math.min(maxNanos, nanos));
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
85 次 |
最近记录: |