首頁  >  文章  >  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