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

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

    Details

    • Subcomponent:
    • Resolved In Build:
      b116
    • CPU:
      generic
    • OS:
      generic

      Description

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

        Attachments

          Issue Links

            Activity

              People

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

                Dates

                • Created:
                  Updated:
                  Resolved: