Kotlin课程时段判断逻辑异常:14:20未识别为第9节课
问题排查与解决方案
核心原因
你遇到的问题大概率是时区不匹配导致的:Kotlin在线游乐场(如JetBrains Playground)默认使用服务器所在时区的时间,而非你本地的时区。当你在本地14:20运行代码时,服务器时区的时间可能并非14:20,导致无法匹配到"period nine"的条件,最终走到else分支输出"Between classes"。
举个例子:如果服务器使用UTC时区,你在UTC+8时区(如中国)的14:20,对应UTC时间是6:20;如果服务器使用UTC+1时区,对应时间则是13:20——这两个时间都无法匹配任何课程时段的条件,自然会输出"Between classes"。
解决方案
1. 强制指定本地时区获取时间
修改LocalDateTime.now()的调用,明确指定你所在的时区ID,确保获取的时间与本地一致:
// 替换为你所在的时区ID,比如中国用"Asia/Shanghai",美国纽约用"America/New_York" val currentDate = LocalDateTime.now(ZoneId.of("Asia/Shanghai")) val hour = currentDate.hour val minute = currentDate.minute
你可以通过ZoneId.getAvailableZoneIds()查看所有可用的时区ID。
2. 优化时段判断逻辑(可选但推荐)
将时间转换为总分钟数(hour * 60 + minute),可以让时段区间的判断更直观,减少条件写错或遗漏的概率:
val totalMinutes = hour * 60 + minute val whatPeriod = when (totalMinutes) { in 0..478 -> "Before school" // 00:00 - 07:58 in 480..521 -> "It's period one." // 08:00 - 08:41 in 525..566 -> "It's period two." // 08:45 - 09:26 in 571..615 -> "It's period three." // 09:31 - 10:15 in 620..661 -> "It's period four." // 10:20 - 11:01 in 666..707 -> "It's period five." // 11:06 - 11:47 in 712..753 -> "It's period six." // 11:52 - 12:33 in 758..799 -> "It's period seven." // 12:38 - 13:19 in 804..845 -> "It's period eight." // 13:24 - 14:05 in 849..950 -> "It's period nine." // 14:09 - 15:50 in 954..995 -> "It's period ten." // 15:54 - 16:35 else -> "After school" // 16:35 之后 }
3. 调试辅助步骤
可以先打印代码实际获取的时间,验证是否与预期一致:
println("Current time: $hour:$minute")
内容的提问来源于stack exchange,提问作者user16634633
相关产品推荐
相关产品推荐

