it-swarm.com.ru

Java8 DateTimeFormatter am/pm

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

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

Так что-то не так с часами? Когда я опускаю один из 'h', он идет дальше (хотя это должно просто 0-pad мои часы), но тогда ему не нравятся 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' ​​в качестве шаблона, он говорит, что ему не нравятся два a, и теперь я застрял, поскольку сообщения об ошибках не помогают.

11
Nozdrum

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

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

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

15
assylias

Оказывается, это решение также решает попытку анализа месяцев смешанного случая (например, «июль») с использованием «МММ».

0
user3897528