Scala中dd/MM/yyyy hh:mm:ss转yyyy-MM-ddThh:mm:ss.SSSz的实现方法
Scala 日期字符串格式转换实现方案
Scala 可以直接使用 Java 8+ 内置的 java.time 时间库完成转换,该库线程安全,无需引入第三方依赖。
完整实现代码
import java.time.LocalDateTime import java.time.format.DateTimeFormatter import java.util.Locale object DateConverter { def convert(inputDateStr: String): String = { // 定义输入格式:匹配 d/M/yyyy 或 dd/MM/yyyy 格式的24小时制时间 val inputFormatter = DateTimeFormatter.ofPattern("d/M/yyyy HH:mm:ss", Locale.ENGLISH) // 定义输出格式,按需求拼接T和z字符 val outputFormatter = DateTimeFormatter.ofPattern("yyyy-M-d'T'HH:mm:ss.SSS'z'", Locale.ENGLISH) val dateTime = LocalDateTime.parse(inputDateStr, inputFormatter) dateTime.format(outputFormatter) } def main(args: Array[String]): Unit = { val input = "14/5/2020 12:57:09" println(convert(input)) // 输出:2020-5-14T12:57:09.000z } }
注意事项
- 如果输入时间为12小时制,需要把输入格式中的
HH改为hh,同时补充上下午匹配标识a - 如果需要输出真实时区偏移而非固定字符
z,可以改用ZonedDateTime指定时区后再格式化,示例如下:import java.time.{LocalDateTime, ZoneId, ZonedDateTime} import java.time.format.DateTimeFormatter val inputFormatter = DateTimeFormatter.ofPattern("d/M/yyyy HH:mm:ss") // 输出格式移除z的单引号,会自动生成时区标识 val outputFormatter = DateTimeFormatter.ofPattern("yyyy-M-d'T'HH:mm:ss.SSSz") val input = "14/5/2020 12:57:09" val zonedDt = LocalDateTime.parse(input, inputFormatter).atZone(ZoneId.of("UTC")) println(zonedDt.format(outputFormatter)) // UTC时区输出:2020-5-14T12:57:09.000UTC - 禁止使用旧版
java.text.SimpleDateFormat实现,该类线程不安全,多线程场景下会出现解析错误
内容的提问来源于stack exchange,提问作者Ciroc
相关产品推荐
相关产品推荐

