随着 Java 8 的初始版本,java.time 包出现了解析秒数的分数时出现问题。当将“SS”添加到 DateTimeFormatter 模式以表示秒的分数并遇到异常时,就会出现此问题。
当尝试解析秒的分数时,如指定的那样“SS”模式,抛出异常。这是令人惊讶的,因为文档表明这应该有效。
此问题后来在 Java 9 中报告并修复。但是,在 Java 9 发布之前,需要一种解决方法。正如 JDK bug 报告中提到的,可以使用以下解决方法:
DateTimeFormatter dtf = new DateTimeFormatterBuilder() .appendPattern("yyyyMMddHHmmss") .appendValue(ChronoField.MILLI_OF_SECOND, 3) .toFormatter();
问题的关键在于如何解析秒的分数字符是相邻的。仅appendValue(...) 方法支持相邻值解析,该方法采用数字表示。由小数部分内部使用的appendFraction(...)方法不处理相邻值解析。当模式包含相邻数字时,此限制会阻止对秒分数的正确解释。
虽然上述解决方法解决了该问题,但它可能并不适合所有用例。其他替代方案包括:
在 Java 9 中,该问题已得到解决。现在可以使用“SS”模式正确解析秒的分数,或者为了获得更高的精度,使用 ChronoField.MICRO_OF_SECOND 或 ChronoField.NANO_OF_SECOND 字段。
以上是Java.time 在 Java 9 之前可以解析秒的小数部分吗?的详细内容。更多信息请关注PHP中文网其他相关文章!