gpt4 book ai didi

java - 使用 Java LocalTime 锁定下溢/溢出

转载 作者:搜寻专家 更新时间:2023-11-01 01:59:55 24 4
gpt4 key购买 nike

当从 LocalTime 对象中减去给定的数量时,我意识到可能会发生上溢/下溢。

示例:

00:30 - 35 minutes = 23:55
23:30 + 35 minutes = 00:05

对于我的应用程序,我希望锁定时间使得上述内容在下溢时生成 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);

上面假设 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));
}

关于java - 使用 Java LocalTime 锁定下溢/溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51808966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com