Java中不使用SimpleDateFormat将字符串时间戳转为日期的问题
Java日期解析问题解决:无SimpleDateFormat处理"20221225182600Z+0100"
错误根源
你的代码存在两个关键问题:
- 格式化器误用:你创建了自定义的
DateTimeFormatter,但解析时却传入了dateTimeFormatter.ISO_OFFSET_TIME——这是JDK内置的仅用于解析偏移时间的常量,和你定义的格式化器毫无关系,直接导致解析逻辑错乱。 - 格式串不匹配:输入字符串里的
Z是固定字面量,但你的格式串yyyyMMddHHmmssZ没有对其转义,格式化器会把Z当成时区标识(UTC)来解析,自然无法匹配后续的+0100,这就是报错"Text '20221225182600Z+0100' could not be parsed at index 2"的核心原因。
修正代码
String dateString = "20221225182600Z+0100"; // 用单引号转义字面量Z,末尾的Z匹配+0100格式的时区偏移 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss'Z'Z"); ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateString, dateTimeFormatter); System.out.println(zonedDateTime);
额外说明
- 输入中的
Z如果是笔误(比如本应只表示UTC或只带+0100偏移),需要先修正输入字符串,再对应调整格式串。 - 格式串里的
'Z'表示将该字符作为普通文本解析,末尾的Z则专门匹配±HHmm格式的时区偏移量。
内容的提问来源于stack exchange,提问作者VIMALJITH K
相关产品推荐
相关产品推荐

