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

如何修复Kotlin工作时间函数,实现日期区间完整映射?

修复工作时间映射函数问题

问题说明

当前实现的getWorkingHours()函数无法正确处理API返回的日期范围格式(如"Sun - Thu:8:00 am-8:00 pm"),仅能匹配范围两端的日期,中间的周一、周二、周三会被错误标记为Closed,不符合预期输出。

错误根源

原代码使用day in dayRange的字符串包含判断,这种方式只能识别直接出现在dayRange字符串中的日期缩写(比如Sun和Thu),无法解析Sun - Thu这种范围所覆盖的所有中间日期。

修复后的代码

fun getWorkingHours(): Map<String, String> {
    val branches = libraryBranchesLiveData.value!!
    val hoursByDay: MutableMap<String, String> = mutableMapOf()
    val daysOrder = listOf("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat")
    // 初始化所有日期为Closed
    daysOrder.forEach { day -> hoursByDay[day] = "Closed" }

    val branchOpenedTimes = branches[selectedBranchIdPositionInList].opened_time ?: return hoursByDay
    if (branchOpenedTimes.isEmpty()) return hoursByDay

    // 遍历每个时间规则
    branchOpenedTimes.forEach { workingHour ->
        val parts = workingHour.split(":", limit = 2)
        val dayPart = parts[0].trim()
        val hours = parts[1].trim()

        // 判断是单个日期还是日期范围
        if (dayPart.contains("-")) {
            // 处理日期范围,比如 "Sun - Thu"
            val rangeParts = dayPart.split("-").map { it.trim() }
            val startDay = rangeParts[0]
            val endDay = rangeParts[1]

            val startIndex = daysOrder.indexOf(startDay)
            val endIndex = daysOrder.indexOf(endDay)

            // 遍历范围内的所有日期
            if (startIndex != -1 && endIndex != -1) {
                for (i in startIndex..endIndex) {
                    hoursByDay[daysOrder[i]] = hours
                }
            }
        } else {
            // 处理单个日期,比如 "Fri"
            if (daysOrder.contains(dayPart)) {
                hoursByDay[dayPart] = hours
            }
        }
    }

    return hoursByDay
}

修复说明

  1. 初始化默认值:先把所有日期的工作时间设为Closed,避免遗漏未匹配的日期(比如示例中的Sat)。
  2. 解析日期范围:通过判断dayPart是否包含-来区分单个日期和范围,对于范围,找到起始和结束日期在daysOrder中的索引,然后遍历索引区间内的所有日期,设置对应的工作时间。
  3. 简化逻辑:去掉冗余的StringBuilder拼接(当前场景下一个日期只会对应一组时间),直接覆盖默认的Closed值。

验证效果

当API返回["Sun - Thu:8:00 am-8:00 pm","Fri:8:00 am-12:00 pm"]时,函数输出将符合预期:

Sun = 8:00 am-8:00 pm
Mon = 8:00 am-8:00 pm
Tue = 8:00 am-8:00 pm
Wed = 8:00 am-8:00 pm
Thu = 8:00 am-8:00 pm
Fri = 8:00 am-12:00 pm
Sat = Closed

内容的提问来源于stack exchange,提问作者Ali Haider

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:13:17