web-dev-qa-db-ja.com

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'の1つをドロップすると、さらに進みます(ただし、時間を0-padする必要があります)が、pm-stuffが気に入らない

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'をパターンとして試してみると、2つのaが気に入らないと表示され、エラーメッセージが役に立たないため、スタックします。

12
Nozdrum

aは、大文字でPMまたはAMのいずれかを予期します。大文字と小文字を区別しないフォーマッタを取得するには、手動で作成する必要があります。

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

7月16日は水曜日ではないため、新しいエラーが発生することに注意してください。

16
assylias

このソリューションは、「MMM」を使用して大文字と小文字が混在する月(「7月」など)を解析しようとすることも解決することがわかりました。

0
user3897528