DateTimeFormatter偏移量O用法疑问及解析失败问题求助
Java 8 DateTimeFormatter 偏移量O解析失败问题
我查阅Java 8 DateTimeFormatter文档时,没找到偏移量O的实际使用示例。文档对O的描述如下:
偏移量O:根据模式字母的数量格式化本地化偏移量。1个字母输出本地化偏移量的短格式,即本地化偏移文本(如'GMT'),小时无前导零,非零时可选两位分钟和秒,带冒号,例如'GMT+8'。4个字母输出全格式,即本地化偏移文本(如'GMT'),小时和分钟为两位数字,非零时可选秒字段,带冒号,例如'GMT+08:00'。其他数量的字母会抛出IllegalArgumentException。
按照文档说明,1个O对应短格式(如GMT+8),4个O对应全格式(如GMT+08:00),于是我写了如下测试代码:
val dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSO") dtf.parse("2020-01-01T00:00:00.000GMT+8") // 解析失败 ... val dtf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSOOOO") dtf2.parse("2020-01-01T00:00:00.000GMT+08:00") // 解析失败
两段代码都解析失败,报错信息如下:
[info] java.time.format.DateTimeParseException: Text '2020-01-01T00:00:00.000GMT+8' could not be parsed: String index out of range: 28 [info] at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1920) [info] at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1781) [info] ... [info] Cause: java.lang.StringIndexOutOfBoundsException: String index out of range: 28 [info] at java.lang.String.charAt(String.java:658) [info] at java.time.format.DateTimeFormatterBuilder$LocalizedOffsetIdPrinterParser.getDigit(DateTimeFormatterBuilder.java:3526) [info] at java.time.format.DateTimeFormatterBuilder$LocalizedOffsetIdPrinterParser.parse(DateTimeFormatterBuilder.java:3588) [info] at java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.parse(DateTimeFormatterBuilder.java:2219) [info] at java.time.format.DateTimeFormatter.parseUnresolved0(DateTimeFormatter.java:2010) [info] at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1939) [info] at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1777)
我还试过带空格的输入格式2020-01-01T00:00:00.000 GMT+8,依然解析失败。请问我是不是误用了偏移量O?
内容的提问来源于stack exchange,提问作者stackoverflowflowflwofjlw
相关产品推荐
相关产品推荐

