Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8154050

java.time.format.DateTimeFormatter can't parse localized zone-offset

XMLWordPrintable

    • b116
    • generic
    • generic

      FULL PRODUCT VERSION :
      java version "1.8.0_77"
      Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
      Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)

      ADDITIONAL OS VERSION INFORMATION :
      Mac OS 10.11.1

      A DESCRIPTION OF THE PROBLEM :
      The DateTimeFormatter fails to parse its own output for format strings containing "O". The following code throws a StringIndexOutOfBoundsException on the final line.

      import java.time.ZoneOffset
      import java.time.ZonedDateTime
      import java.time.format.DateTimeFormatter
      DateTimeFormatter formatter = DateTimeFormatter
              .ofPattern("yyyy-MM-dd'T'HH:mm:ss.S O")
              .withLocale(Locale.ENGLISH)
      String date = formatter.format(ZonedDateTime.now(ZoneOffset.UTC));
      formatter.parse(date)

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      import java.time.ZoneOffset
      import java.time.ZonedDateTime
      import java.time.format.DateTimeFormatter
      DateTimeFormatter formatter = DateTimeFormatter
              .ofPattern("yyyy-MM-dd'T'HH:mm:ss.S O")
              .withLocale(Locale.ENGLISH)
      String date = formatter.format(ZonedDateTime.now(ZoneOffset.UTC));
      formatter.parse(date)

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Successful parse
      ACTUAL -
      StringIndexOutOfBoundsException

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      java.time.format.DateTimeParseException: Text '2016-04-08T10:49:52.7 GMT' could not be parsed: String index out of range: 25

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      import java.time.ZoneOffset
      import java.time.ZonedDateTime
      import java.time.format.DateTimeFormatter
      DateTimeFormatter formatter = DateTimeFormatter
              .ofPattern("yyyy-MM-dd'T'HH:mm:ss.S O")
              .withLocale(Locale.ENGLISH)
      String date = formatter.format(ZonedDateTime.now(ZoneOffset.UTC));
      formatter.parse(date)
      ---------- END SOURCE ----------

            ntv Nadeesh Tv
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: