Rumah  >  Artikel  >  Java  >  Mengapa Pakej `java.time` Java 8 Gagal Menghuraikan Nilai Pecahan Kedua dalam Mod Tegas?

Mengapa Pakej `java.time` Java 8 Gagal Menghuraikan Nilai Pecahan Kedua dalam Mod Tegas?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-02 00:35:31498semak imbas

Why Does Java 8's `java.time` Package Fail to Parse Fraction-of-Second Values in Strict Mode?

Adakah java.time Gagal Menghuraikan Fraction-of-Second?

Dengan keluaran awal Java 8, menghuraikan fraction-of-second menggunakan java.time pakej mungkin menghadapi pengecualian. Pertimbangkan kod ini:

<code class="java">String input = "2011120312345655";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSS");
LocalDateTime localDateTime = LocalDateTime.parse(input, formatter);</code>

Kod ini gagal dengan pengecualian:

java.time.format.DateTimeParseException

Dokumentasi menyatakan bahawa mod ketat memerlukan bilangan aksara format yang sama seperti digit input. Walau bagaimanapun, kod tersebut termasuk "SS" untuk pecahan saat, yang bercanggah dengan bilangan digit dalam input.

Untuk menangani isu ini, penyelesaian telah dicadangkan:

<code class="java">DateTimeFormatter dtf =
  new DateTimeFormatterBuilder()
  .appendPattern("yyyyMMddHHmmss")
  .appendValue(ChronoField.MILLI_OF_SECOND, 3)
  .toFormatter();</code>

Walau bagaimanapun, penyelesaian ini tidak merangkumi sepenuhnya kes penggunaan hanya dua simbol corak "S". Medan lain seperti MICRO_OF_SECOND (enam SSSSSS) atau NANO_OF_SECOND (sembilan SSSSSSSSS) mesti digunakan.

Menurut dokumentasi:

"Fraction: Outputs nano-of-second field sebagai pecahan- of-second. (...) Apabila menghuraikan dalam mod ketat, bilangan digit yang dihuraikan mesti sepadan dengan kiraan huruf corak."

Ini membayangkan bahawa "S" mewakili mana-mana pecahan saat, bukan hanya milisaat .

Penyelesaian dalam Java 9

Sehingga Java 9, isu itu telah diselesaikan. Keluaran awal Java 8 menghadapi cabaran dalam melaksanakan penghuraian nilai bersebelahan untuk bahagian pecahan. Pengehadan ini menghalang tafsiran medan dalam teks yang merangkumi berbilang medan tanpa sempadan yang jelas.

Walau bagaimanapun, dalam Java 9, penghurai JSR-310 memperoleh keupayaan untuk menghuraikan bahagian pecahan dalam penghuraian nilai bersebelahan. Peningkatan ini menangani cabaran yang dihadapi dalam versi terdahulu dan memberikan fleksibiliti yang dipertingkatkan apabila bekerja dengan nilai pecahan saat.

Atas ialah kandungan terperinci Mengapa Pakej `java.time` Java 8 Gagal Menghuraikan Nilai Pecahan Kedua dalam Mod Tegas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn