Java: не удалось разобрать строку времени - PullRequest
0 голосов
/ 27 декабря 2018

Я пытался проанализировать следующую временную строку 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 голосов
/ 27 декабря 2018

Вы используете неправильный символ шаблона 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". Кстати: "v", как указано в другом ответе @Рикола представляет собой общее имя зоны без каких-либо подсказок, если это стандартное или дневное время, но ваша аббревиатура "CST" скорее указывает на символ "z" в качестве правильного символа.

Мне также интересно, почему вы выбрасываетеинформация о зоне после анализа, выбрав тип LocalDateTime вместо ZonedDateTime (который можно перевести в мгновение на следующем шаге).

0 голосов
/ 27 декабря 2018
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.

...