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
相关产品推荐
相关产品推荐

