Scala DateTime格式化报错“text could not be parsed at index 0”
问题原因
- 核心原因是你定义的
DateTimeFormatter模式和实际待解析的字符串格式完全不匹配:- 你写的模式
dd/MM/yyyy HH:mm:ss仅能匹配类似20/09/2021 15:57:56的字符串,不包含星期、月份缩写、时区字段 - 实际待解析的字符串
Mon Sep 20 15:57:56 BST 2021属于包含英文星期、月份缩写、时区标识的格式,对应模式为EEE MMM dd HH:mm:ss z yyyy
- 你写的模式
- 额外注意:因为字符串里的星期、月份都是英文缩写,创建
DateTimeFormatter时必须指定英文Locale,否则默认Locale为中文的环境下依然会解析失败
解决代码
import java.time.format.DateTimeFormatter import java.util.Locale import java.time.ZonedDateTime val timeString = "Mon Sep 20 15:57:56 BST 2021" // 指定英文Locale保证英文缩写能正常识别 val formatFinal = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z yyyy", Locale.US) // 解析为带时区的时间对象 val zonedDateTime = ZonedDateTime.parse(timeString, formatFinal) // 转毫秒级时间戳 val timestamp = zonedDateTime.toInstant.toEpochMilli // 如果需要转成你预期的dd/MM/yyyy HH:mm:ss格式字符串可额外转换 val targetFormatStr = zonedDateTime.format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss"))
验证说明
上述代码运行后得到的时间戳对应时间为2021-09-20T15:57:56+01:00[Europe/London],和原始字符串含义完全一致。
内容的提问来源于stack exchange,提问作者lr53
相关产品推荐
相关产品推荐

