Scala如何获取指定日期所属月份的最后一天?
解决Scala中获取指定日期当月最后一天的问题
你的代码存在几个问题,导致报错和功能不符合需求,下面是问题分析和修正后的完整解决方案:
原代码的问题
- 语法错误:
println语句末尾缺少闭合的右括号,编译无法通过。 - 日期格式不匹配:
ZonedDateTime.parse默认使用ISO-8601格式(yyyy-MM-dd),但你的输入是MM/dd/yyyy格式,直接解析会抛出DateTimeParseException。 - 不必要的复杂度:如果仅处理日期(无需时间、时区信息),使用
LocalDate比ZonedDateTime/LocalDateTime更简洁高效。
修正后的完整代码
import java.time.LocalDate import java.time.format.DateTimeFormatter import java.time.temporal.TemporalAdjusters // 定义输入日期的格式(匹配你的输入字符串格式) val inputFormatter = DateTimeFormatter.ofPattern("MM/dd/yyyy") // 定义输出日期格式(和输入格式保持一致) val outputFormatter = DateTimeFormatter.ofPattern("MM/dd/yyyy") // 测试不同输入场景 val testCases = List("01/15/2023", "02/10/2021", "02/10/2024") testCases.foreach { input => val inputDate = LocalDate.parse(input, inputFormatter) val lastDay = inputDate.with(TemporalAdjusters.lastDayOfMonth()) println(s"输入${input} → 当月最后一天:${outputFormatter.format(lastDay)}") }
代码说明
- 日期格式处理:通过
DateTimeFormatter.ofPattern明确指定输入和输出的格式,确保解析和格式化都符合MM/dd/yyyy的要求。 - 自动处理闰年:
TemporalAdjusters.lastDayOfMonth()会自动识别闰年,正确返回2月29日(如2024年)或28日(如2021年)。 - 简洁高效:使用
LocalDate专注处理日期逻辑,避免了时区、时间部分的冗余处理。
运行上述代码后,输出结果如下:
输入01/15/2023 → 当月最后一天:01/31/2023 输入02/10/2021 → 当月最后一天:02/28/2021 输入02/10/2024 → 当月最后一天:02/29/2024
内容的提问来源于stack exchange,提问作者Gopichand
相关产品推荐
相关产品推荐

