如何在Kotlin中从营业时间字符串提取日期时间并按天格式化输出
实现方案
我们可以通过「拆分规则段→解析日期范围→映射存储→按序输出」四步完成格式转换,以下是可直接运行的Kotlin实现,完全适配你给出的所有输入样例:
fun formatBusinessHours(raw: String): List<String> { // 固定星期顺序,保证输出顺序符合习惯 val weekOrder = listOf("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun") val dayToHours = mutableMapOf<String, String>() // 1. 拆分多组时间规则 val ruleSegments = raw.split("/").map { it.trim() } ruleSegments.forEach { segment -> // 2. 拆分单条规则的日期部分、营业时间部分:以第一个出现的数字为分割点 val firstDigitIndex = segment.indexOfFirst { it.isDigit() } val dayPart = segment.substring(0, firstDigitIndex).trim() val hours = segment.substring(firstDigitIndex).trim() // 3. 解析日期规则,支持范围和单个日期两种格式 val dayUnits = dayPart.split(",").map { it.trim() } dayUnits.forEach { unit -> if (unit.contains("-")) { // 处理日期范围,如 Mon-Thu val (startDay, endDay) = unit.split("-").map { it.trim() } val startIndex = weekOrder.indexOf(startDay) val endIndex = weekOrder.indexOf(endDay) for (i in startIndex..endIndex) { dayToHours[weekOrder[i]] = hours } } else { // 处理单个日期,如 Sun dayToHours[unit] = hours } } } // 4. 按星期固定顺序输出结果 return weekOrder.map { "$it ${dayToHours[it]}" } } // 测试用例 fun main() { val string1 = "Mon-Thu, Sun 11:30 am - 9:00 pm / Fri-Sat 11:30 am - 9:30 pm" val string2 = "Mon-Sun 11:00 am - 10:30 pm" val string3 = "Mon-Thu, Sun 11:30 am - 10:00 pm / Fri-Sat 11:30 am - 10:30 pm" println("==== string1 转换结果 ====") formatBusinessHours(string1).forEach { println(it) } println("\n==== string2 转换结果 ====") formatBusinessHours(string2).forEach { println(it) } println("\n==== string3 转换结果 ====") formatBusinessHours(string3).forEach { println(it) } }
运行后输出结果和你给出的示例完全一致,如果后续遇到API返回的格式变种,调整分割规则即可适配。
内容的提问来源于stack exchange,提问作者Sean H.
相关产品推荐
相关产品推荐

