Java:无法解析时间字符串

时间:2018-12-27 14:54:10

标签: 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 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)

我应该如何解决这个问题?

2 个答案:

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

您可以使用vz