Home >Java >javaTutorial >Why Does java.time Fail to Parse Fraction-of-Second Despite Documentation?
java.time Unable to Parse Fraction-of-Second
Despite adhering to the documentation, parsing fraction-of-second with java.time encounters issues. This article explores the problem and provides alternative solutions until the issue is resolved.
The Issue
When using DateTimeFormatter to parse a string with fraction-of-second (represented by "SS"), an exception is thrown. This behavior contradicts the documentation's claim that strict mode matches the number of format characters to input digits.
Possible Workarounds
Until Java 9 (or later) addresses this problem, several workarounds are available:
<code class="java">DateTimeFormatter dtf = new DateTimeFormatterBuilder() .appendPattern("yyyyMMddHHmmss") .appendValue(ChronoField.MILLI_OF_SECOND, 3) .toFormatter();</code>
Note: This approach may not handle cases with only two pattern symbols (e.g., "SS").
<code class="java">String input = "2011120312345655"; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS"); Date d = sdf.parse(input);</code>
However, this workaround can also misinterpret fraction-of-second values.
External libraries like Joda-Time or Time4J support fraction-of-second parsing. For example, using Joda-Time:
<code class="java">String input = "2011120312345655"; DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyyMMddHHmmssSS"); System.out.println(dtf.parseLocalDateTime(input));</code>
Hacky Solutions:
One could manually extract the fractional part from the input string and apply adjustments, but this approach is prone to errors.
Conclusion
Parsing fraction-of-second values using java.time currently has limitations. Until Java 9 addresses this issue, users can employ the workarounds discussed above. It is also worth noting that SimpleDateFormat may also misinterpret fraction-of-second values. For definitive results, it is recommended to use external libraries like Joda-Time or Time4J.
The above is the detailed content of Why Does java.time Fail to Parse Fraction-of-Second Despite Documentation?. For more information, please follow other related articles on the PHP Chinese website!