我正尝试使用以下代码解析以下时间字符串20180904-23:15:00.000 CST
DateTimeFormatter abcDateFmt = DateTimeFormatter.ofPattern("yyyyMMdd-HH:mm:ss.SSS [XXX]");
LocalDateTime abcTimestamp = LocalDateTime.parse("20180904-23:15:00.000 CST", abcDateFmt );
然后我遇到了这个异常。
Exception in thread "main" java.time.format.DateTimeParseException: Text '20180904-23:15:00.000 CST' could not be parsed, unparsed text found at index 22
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2049)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948)
at java.base/java.time.LocalDateTime.parse(LocalDateTime.java:492)
我应该如何解决这个问题?
答案 0 :(得分:2)
您使用了错误的图案符号X,该符号表示偏移量,而不是区域名称的缩写。参见javadoc:
z time-zone name zone-name Pacific Standard Time; PST
X zone-offset 'Z' for zero offset-X Z; -08; -0830; -08:30; -083015; -08:30:15
建议:使用模式字母“ z”。顺便说一句:@Ricola另一个答案中的“ v”表示通用区域名称,如果这是标准名称或白天,则无任何提示时间,但您的缩写“ CST”则将符号“ z”指示为正确的符号。
我还想知道为什么在解析后通过选择类型LocalDateTime
而不是ZonedDateTime
抛弃区域信息(可以将其转换为下一步)。
答案 1 :(得分:0)
DateTimeFormatter abcDateFmt = DateTimeFormatter.ofPattern("yyyyMMdd-HH:mm:ss.SSS [v]");
LocalDateTime abcTimestamp = LocalDateTime.parse("20180904-23:15:00.000 CST", abcDateFmt );
来自javadoc:
X zone-offset 'Z' for zero offset-X Z; -08; -0830; -08:30;
v generic time-zone name zone-name Pacific Time; PT
z time-zone name zone-name Pacific Standard Time; PST
您可以使用v
或z
。