隨著 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中文網其他相關文章!