3

DateTimeFormatter次の有効な日付のを作成する必要があります。

  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";

次の日時フォーマッタを試しましたが、これは最後の 2 つの日付 ( date9date10) で失敗します。

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();

からのすべての日付は正常date1date8機能しますが、DateTimeParseException最後の 2 つの日付を解析しようとすると次のようになります。

スレッド「メイン」の例外 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 パターンを使用しているときに、最後の 2 つの日付が失敗する理由を理解できません。

4

2 に答える 2