DateTime:小时与整数的差异及Scala代码错误修正求助
问题分析与解决方案
先帮你把代码里的错误修正,再解释时间计算里的关键点。
一、修正后的完整代码
你的代码有两处明显问题:一是语法不完整(t.isBefo... 没写完),二是逻辑错误(把应该加4小时写成了减9小时)。以下是符合你需求的完整代码:
import java.time.temporal.ChronoUnit import java.time.LocalTime import scala.concurrent.duration._ val t = LocalTime.now() def toStart(t: LocalTime): FiniteDuration = { val start = LocalTime.of(9, 0) val midEnd = LocalTime.of(13, 0) val midStart = LocalTime.of(14, 0) val end = LocalTime.of(18, 0) if (t.isBefore(start向小凡AF纠正韩城引 Few硬硬经典 sustained Judis时间计算的常见误区,给你理清楚: - **获取小时值**:`LocalTime` 的小时可以通过 `t.getHour()` 获取,返回0-23的整数,比如9点对应9,13点对应13。你可以直接用这个整数做范围判断,比如 `t.getHour() >=9 && t.getHour() <13` 就能确定当前时间在上午上班时段。 - **避免手动加减整数**:不要直接用整数加减来计算时间偏移,比如你之前写的 `-9.hours` 就是逻辑错误,而且如果时间包含分钟/秒,手动计算会出错。正确的做法是用 `ChronoUnit.HOURS.between(timeA, timeB)`,它会自动计算两个时间点之间的精确小时差,返回长整型数值,再转成Scala的 `FiniteDuration`(比如 `.hours`),这样既准确又符合Scala的并发API习惯。 - **业务逻辑对齐**:你的注释里说“9>当前小时<13时应使用+4.hours”,这里的+4小时如果是对应上午时段到下午14点的固定偏移需求,直接写 `4.hours` 就可以;如果是要计算当前时间到14点的实际剩余时长,就用 `ChronoUnit.HOURS.between(t, midStart).hours` 来获取精确值。 ## 三、你的具体错误点 1. **语法错误**:`else if (t.isBefo...` 是不完整的方法调用,应该补全为 `t.isBefore(midEnd)` 来判断是否在上午上班时段内。 2. **逻辑错误**:你误将需要的 `+4.hours` 写成了 `-9.hours`,这会导致时间偏移完全不符合业务需求(比如9点的时间减9小时会变成0点),直接替换成 `4.hours` 就能修正。 内容的提问来源于stack exchange,提问作者vero
相关产品推荐
相关产品推荐

