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

Scala如何获取指定日期所属月份的最后一天?

解决Scala中获取指定日期当月最后一天的问题

你的代码存在几个问题,导致报错和功能不符合需求,下面是问题分析和修正后的完整解决方案:

原代码的问题

  1. 语法错误:println语句末尾缺少闭合的右括号,编译无法通过。
  2. 日期格式不匹配:ZonedDateTime.parse默认使用ISO-8601格式(yyyy-MM-dd),但你的输入是MM/dd/yyyy格式,直接解析会抛出DateTimeParseException。
  3. 不必要的复杂度:如果仅处理日期(无需时间、时区信息),使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:00:56