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

Scala中使用Joda Time将dd/mm/yyyy、dd/m/yyyy转为yyyymmdd的方法

用Joda Time在Scala中转换日期格式

嘿,这事儿好办!你已经引入了joda-time 2.9.9的依赖,接下来只需要利用Joda的DateTimeFormat类来处理两种输入格式的解析,再转成目标格式就行。

核心思路

Joda Time的日期格式模式里,M可以匹配1位或2位的月份(不管是3还是12都能识别),而dd固定匹配2位的日期,所以用dd/M/yyyy作为解析格式,就能同时兼容dd/mm/yyyy和dd/m/yyyy这两种输入。之后再用yyyyMMdd格式输出即可。

代码实现

首先导入必要的类:

import org.joda.time.LocalDate
import org.joda.time.format.DateTimeFormat

然后写一个简单的转换函数:

def convertToYyyyMmDd(inputDate: String): String = {
  // 定义解析器,兼容两位/一位月份的输入
  val dateParser = DateTimeFormat.forPattern("dd/M/yyyy")
  // 解析为LocalDate(只处理日期,不需要时间部分)
  val parsedDate = dateParser.parseLocalDate(inputDate)
  // 定义输出格式的格式化器
  val outputFormatter = DateTimeFormat.forPattern("yyyyMMdd")
  // 生成目标格式的字符串
  outputFormatter.print(parsedDate)
}

测试例子

试试这两个输入:

println(convertToYyyyMmDd("31/12/2023")) // 输出 20231231
println(convertToYyyyMmDd("05/3/2024"))  // 输出 20240305

健壮性优化(处理无效输入)

如果担心输入的日期不合法(比如32/13/2023这种错误格式),可以用Scala的Option来封装结果,避免抛出异常:

def convertToYyyyMmDdSafe(inputDate: String): Option[String] = {
  val dateParser = DateTimeFormat.forPattern("dd/M/yyyy")
  try {
    val parsedDate = dateParser.parseLocalDate(inputDate)
    Some(DateTimeFormat.forPattern("yyyyMMdd").print(parsedDate))
  } catch {
    case _: IllegalArgumentException =>
      println(s"警告:输入的日期格式无效 -> $inputDate")
      None
  }
}

这个版本会在输入无效时返回None,同时打印提示信息,更适合生产环境使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:11:53