2016-07-07 3 views
6

Я пытаюсь разобрать некоторые даты, но DateTimeParser, кажется, не согласен со мной о том, что действуетJava8 DateTimeFormatter утро/вечер

import java.time.ZonedDateTime 
import java.time.format.DateTimeFormatter 
import java.util.Locale 

ZonedDateTime.parse("Wed Jul 16, 2016 4:38pm EDT", DateTimeFormatter.ofPattern("EEE MMM dd, yyyy hh:mma z", Locale.US)) 

Когда я пытаюсь это он говорит

java.time.format.DateTimeParseException: Text 'Wed Jul 16, 2016 4:38pm EDT' could not be parsed at index 17 

Так что что-то не так с часами? Когда я бросаю один из «ч» она получает дополнительно (Altough он должен только 0-подушечка мои часы), но тогда это не нравится PM-материал

ZonedDateTime.parse("Wed Jul 16, 2016 4:38pm EDT", DateTimeFormatter.ofPattern("EEE MMM dd, yyyy h:mma z", Locale.US)) 
java.time.format.DateTimeParseException: Text 'Wed Jul 16, 2016 4:38pm EDT' could not be parsed at index 21 

Я не знаю, что его точное проблема есть. Когда я пытаюсь «hh: mmaa» как шаблон, он говорит, что ему не нравятся два а, и теперь я застреваю, поскольку сообщения об ошибках не помогают.

ответ

9

a ожидает либо PM, либо AM в верхнем регистре. Чтобы получить регистрозависимости форматировщик вам нужно построить его вручную:

DateTimeFormatter fmt = new DateTimeFormatterBuilder() 
     .parseCaseInsensitive() 
     .appendPattern("EEE MMM dd, yyyy h:mma z") 
     .toFormatter(Locale.US); 

Обратите внимание, что вы получите новую ошибку, потому что 16 июля не среда.

+0

wow .. Любая идея, почему по умолчанию не поддерживается нижний регистр? Я конвертировал старый код java.util.Date в java.time, и у SimpleDateFormat не было проблем с ним. –

Смежные вопросы