有効な日付はDateTimeFormatter
です。1つのDateTimeFormater Java 8ですべてのゾーンオフセットを処理する方法
String date1 = "2017-06-20T17:25:28";
String date2 = "2017-06-20T17:25:28.477777";
String date3 = "2017-06-20T17:25:28.477777Z";
String date4 = "2017-06-20T17:25:28.477777UTC";
String date5 = "2017-06-20T17:25:28.477777-05";
String date6 = "2017-06-20T17:25:28.477777+05";
String date7 = "2017-06-20T17:25:28.477777+05:30";
String date8 = "2017-06-20T17:25:28.477777-05:30";
String date9 = "2017-06-20T17:25:28.477777+0530";
String date10 = "2017-06-20T17:25:28.477777-0530";
私は、次の日付時刻フォーマッタを試してみましたが、これは最後の二つの日付(date9
、date10
)で失敗しました。
private static final DateTimeFormatter DATE_TIME_FORMATTER = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd'T'HH:mm:ss")
.appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, true)
.optionalStart().appendZoneId().optionalEnd()
.optionalStart().appendOffset("+HH", "+00").optionalEnd()
.optionalStart().appendOffset("+HH:mm", "+00:00").optionalEnd()
.optionalStart().appendOffset("+HHmm", "+0000").optionalEnd().toFormatter();
date1
date8
に細かい作業からすべての日付が、最後の二つの日付解析しようとしたとき、私はDateTimeParseException
を得る:
例外スレッド「メイン」java.time.format.DateTimeParseExceptionで:テキストを " 2017-06-20T17:25:28.477777 + 0530 'を解析できませんでした。未解析のテキストがインデックス29に見つかりました。
私は次のように使用しています。
LocalDateTime.parse(date1, DATE_TIME_FORMATTER);
OffsetIdPrinterParser
からのオフセットのための有効なパターン:
static final class OffsetIdPrinterParser implements DateTimePrinterParser {
static final String[] PATTERNS = new String[] {
"+HH", "+HHmm", "+HH:mm", "+HHMM", "+HH:MM", "+HHMMss", "+HH:MM:ss", "+HHMMSS", "+HH:MM:SS",
}; // order used in pattern builder
私は私の最後の二つの日付が失敗する理由私は、有効なZoneOffsetパターンを使用していながら理解することはできませんよ。
私は順序が重要と推測したことがないでしょう... – Eugene
@Eugeneしかし、まだ我々は、Javaがこれを行う理由をすることを見つける必要があります。 –
@Ole V.V.ありがとう、それは動作します –