Scala中如何计算Hour类型与Integer(小时数)的差值?
在Scala中计算Hour类型与整数小时数的差值
嘿,要解决这个问题得先明确你说的Hour类型具体是什么——Scala标准库本身没有原生的Hour类,大概率是指Java时间API里的相关类型(比如java.time.LocalTime中的小时分量,或者java.time.Duration这类时长类型)。下面分几种常见场景给你具体方案:
场景1:处理LocalTime的小时值与整数小时数的差值
如果你的「Hour类型」是从LocalTime里提取的小时(比如调用localTime.getHour()得到的整数),那直接做数值减法就完事了:
import java.time.LocalTime val currentTime = LocalTime.now() val currentHour = currentTime.getHour() // 这是Int类型的当前小时 val targetHours = 10 // 你要对比的整数小时数 val hourDifference = currentHour - targetHours println(s"差值:$hourDifference 小时")
要是你想先算两个时间点的小时差,再和整数小时数对比,用ChronoUnit更方便:
import java.time.LocalTime import java.time.temporal.ChronoUnit val startTime = LocalTime.of(9, 30) val endTime = LocalTime.of(14, 45) // 计算两个时间之间的小时数(返回Long类型) val hoursBetween = ChronoUnit.HOURS.between(startTime, endTime) val targetHours = 5 // 目标整数小时数 val difference = hoursBetween - targetHours println(s"差值:$difference 小时")
场景2:处理Duration与整数小时数的差值
如果你的「Hour类型」是Duration(代表一段时长,比如3小时15分),先把它转成小时数再和整数做减法就行:
import java.time.Duration val meetingDuration = Duration.ofHours(3).plusMinutes(15) // 3小时15分的时长 val targetHours = 2 // 目标整数小时数 // 转成带小数的总小时数(保留分钟部分) val durationInHours = meetingDuration.toHours() + meetingDuration.toMinutesPart() / 60.0 val difference = durationInHours - targetHours println(s"精确差值:$difference 小时") // 要是只需要整数小时差(忽略分钟) val integerHourDiff = meetingDuration.toHours() - targetHours println(s"整数小时差值:$integerHourDiff 小时")
场景3:自定义Hour类的情况
如果是你自己定义的Hour类,那得在类里实现减法方法,比如:
case class Hour(value: Int) { // 直接返回Int类型的差值 def -(other: Int): Int = this.value - other // 或者返回Hour类型的结果 def minus(other: Int): Hour = Hour(this.value - other) } val myHour = Hour(14) val target = 8 val diff = myHour - target // 结果是6 val diffHour = myHour.minus(target) // 结果是Hour(6)
总的来说,核心思路就是把你的Hour类型转换成可计算的数值类型(Int/Long/Double),再和整数小时数做减法,具体怎么实现完全取决于你用的Hour类型到底是啥~
内容的提问来源于stack exchange,提问作者vero
相关产品推荐
相关产品推荐

