Rumah > Java > javaTutorial > teks badan

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

Mary-Kate Olsen
Lepaskan: 2024-11-02 00:35:31
asal
508 orang telah melayarinya

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>
Salin selepas log masuk

Kod ini gagal dengan pengecualian:

java.time.format.DateTimeParseException
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!