Java 8 Date and TimeAPI-解析yyyy-MM-dd'T'HH:mm:ss.SSSZ
ISO8601形式で日付を解析しようとしています:
yyyy-MM-dd'T'HH:mm:ss.SSSZ
Java.time.format.DateTimeFormatterで定義されているデフォルトの形式では解析できないというのは正しいですか?
たとえば、ISO_OFFSET_DATE_TIMEは以下のみを解析します。
yyyy-MM-dd'T'HH:mm:ss.SSSZZ
サンプル:
yyyy-MM-dd'T'HH:mm:ss.SSSZ
2015-04-29T10:15:00.500+0000
yyyy-MM-dd'T'HH:mm:ss.SSSZZ
2015-04-29T10:15:00.500+00:00
ところで:私は問題ではない自分のフォーマッターを定義できることを知っています。 JodaのISODateTimeFormatは両方を解析できるため、何かが欠落していないことを確認したかっただけです。
org.joda.time.format.DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateTime();
DateTime dateTime = dateTimeFormatter.parseDateTime("2015-04-29T10:15:00.500+0000");
これらの煩わしい日付形式に煩わされることはありません。
新しいライブラリがあります dateparser 。
任意のStringを自動的に認識し、それをDate、カレンダー、LocalDateTime、OffsetDateTime正しく。
これを使用すると、yyyy-MM-dd'T'HH:mm:ss.SSSZ
やyyyy-MM-dd'T'HH:mm:ss.SSSZZ
のような適切なパターンを準備する必要はありません。
Date date = DateParserUtils.parseDate("2015-04-29T10:15:00.500+0000");
Calendar calendar = DateParserUtils.parseCalendar("2015-04-29T10:15:00.500Z");
LocalDateTime dateTime = DateParserUtils.parseDateTime("2015-04-29 10:15:00.500 +00:00");
すべて正常に動作しますので、お楽しみください。
これがあなたの期待する答えかどうかはわかりません。
方法1
Instantを使用して解析する
Instant.parse("2015-06-28T10:13:14.743Z");
方法2
指定された入力形式は、指定されたパターンyyyy-MM-dd'T'HH:mm:ss.SSSZから 'Z'を削除した後のISO_DATE_TIME形式と同等です。
次に、ISO_DATE_TIMEを使用して解析できます
text = "2015-06-28T10:13:14.743"
LocalDateTime.parse(text,DateTimeFormatter.ISO_DATE_TIME)
これはデフォルトのフォーマットのいずれとも一致しないように見えるという点で正しいので、Java.time.format.DateTimeFormatterBuilder
を使用してフォーマットを作成する必要があります。
Jodaは、デフォルトのISODateTimeFormatにISO8601形式を使用します。したがって、ドキュメント http://www.w3.org/TR/NOTE-datetime に基づくと、Jodaはフォーマットを解析できません。