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