Java:无法分析时间字符串

Java:无法分析时间字符串,java,datetime,Java,Datetime,我试图使用以下代码解析以下时间字符串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

我试图使用以下代码解析以下时间字符串
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)
我应该如何解决这个问题

DateTimeFormatter abcDateFmt = DateTimeFormatter.ofPattern("yyyyMMdd-HH:mm:ss.SSS [v]");
LocalDateTime abcTimestamp = LocalDateTime.parse("20180904-23:15:00.000 CST", abcDateFmt );
从:

您可以使用
v
z

从:


您可以使用
v
z

您使用了错误的图案符号X,它表示偏移,而不是分区名称的缩写。见:

建议:使用模式字母“z”。顺便说一句,@Ricola的另一个答案中指出的:“v”表示一个通用区域名称,如果这是标准时间或昼间,则没有任何提示,但您的缩写“CST”表示符号“z”是正确的符号


我还想知道,为什么在解析后,您会选择类型
LocalDateTime
而不是
ZonedDateTime
(您可以在下一步将其转换为瞬间),从而丢弃区域信息。

您使用了错误的模式符号X,它表示偏移,而不是区域名称的缩写。见:

建议:使用模式字母“z”。顺便说一句,@Ricola的另一个答案中指出的:“v”表示一个通用区域名称,如果这是标准时间或昼间,则没有任何提示,但您的缩写“CST”表示符号“z”是正确的符号

我还想知道为什么在解析后,您会通过选择类型
LocalDateTime
而不是
ZonedDateTime
(您可以在下一步中转换为瞬间)来丢弃区域信息

 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
   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