You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 18:55:12