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

The `java.time.Instant` class fails to parse a String containing a COMMA

XMLWordPrintable

    • generic
    • generic

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


      ADDITIONAL OS VERSION INFORMATION :
      Mac OS X 10.11.6

      A DESCRIPTION OF THE PROBLEM :
      The `java.time.Instant` class fails to parse input with a comma such as "2016-01-02T12:34:56,7Z".

      The java.time classes handle ISO 8601 formats by default when parsing or generating Strings that represent date-time values.

      The ISO 8601 standard accepts a decimal mark of either a COMMA or a FULL STOP (period, dot), with a preference for the COMMA. Source: the Wikipedia page for ISO 8601.
      https://en.wikipedia.org/wiki/ISO_8601

      So I would expect this to work:

              String inputDot = "2016-01-02T12:34:56.7Z";
              Instant instantDot = Instant.parse ( inputDot );

      …as well as this one…

              String inputComma = "2016-01-02T12:34:56,7Z";
              Instant instantComma = Instant.parse ( inputComma );

      The first one with a dot does indeed succeed, but the second one with a comma fails with a `DateTimeParseException`.

      Exception in thread "main" java.time.format.DateTimeParseException: Text '2016-01-02T12:34:56,7Z' could not be parsed at index 19
      at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
      at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
      at java.time.Instant.parse(Instant.java:395)
      at com.example.javatimestuff.App4.doIt(App4.java:92)
      at com.example.javatimestuff.App4.main(App4.java:61)



      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Run this code:

              String inputComma = "2016-01-02T12:34:56,7Z";
              Instant instantComma = Instant.parse ( inputComma );

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Expect an `Instant` object to be instantiated.
      ACTUAL -
      java.time.format.DateTimeParseException

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      Exception in thread "main" java.time.format.DateTimeParseException: Text '2016-01-02T12:34:56,7Z' could not be parsed at index 19
      at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
      at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
      at java.time.Instant.parse(Instant.java:395)
      at com.example.javatimestuff.App4.doIt(App4.java:92)
      at com.example.javatimestuff.App4.main(App4.java:61)

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
              String inputComma = "2016-01-02T12:34:56,7Z";
              Instant instantComma = Instant.parse ( inputComma );
      ---------- END SOURCE ----------

            naoto Naoto Sato
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated: