首页  >  文章  >  Java  >  Java.time 在 Java 9 之前可以解析秒的小数部分吗?

Java.time 在 Java 9 之前可以解析秒的小数部分吗?

Susan Sarandon
Susan Sarandon原创
2024-11-01 16:11:02399浏览

 Can Java.time Parse Fractions of Seconds Before Java 9?

java.time 无法解析秒小数部分吗?

简介

随着 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(...)方法不处理相邻值解析。当模式包含相邻数字时,此限制会阻止对秒分数的正确解释。

替代方案和更新

虽然上述解决方法解决了该问题,但它可能并不适合所有用例。其他替代方案包括:

  • 使用 SimpleDateFormat,但请注意它可能会错误地解释分数。
  • 等待 Java 9(或更高版本)官方修复。
  • 使用 Joda-Time 或 Time4J 等第三方库。

更新:Java 9 修复

在 Java 9 中,该问题已得到解决。现在可以使用“SS”模式正确解析秒的分数,或者为了获得更高的精度,使用 ChronoField.MICRO_OF_SECOND 或 ChronoField.NANO_OF_SECOND 字段。

以上是Java.time 在 Java 9 之前可以解析秒的小数部分吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn