Rumah >Java >javaTutorial >Bolehkah Java.time Menghuraikan Pecahan Saat Sebelum Java 9?

Bolehkah Java.time Menghuraikan Pecahan Saat Sebelum Java 9?

Susan Sarandon
Susan Sarandonasal
2024-11-01 16:11:02489semak imbas

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

Adakah java.time Tidak Dapat Menghuraikan Pecahan Saat?

Pengenalan

Dengan keluaran awal Java 8, pakej java.time muncul mempunyai isu menghurai pecahan saat. Masalah ini timbul apabila menambah "SS" pada corak DateTimeFormatter untuk mewakili pecahan saat dan menghadapi pengecualian.

Masalahnya

Apabila cuba menghuraikan pecahan saat, seperti yang ditentukan oleh Corak "SS", pengecualian telah dilemparkan. Ini mengejutkan kerana dokumentasi menunjukkan bahawa ini sepatutnya berjaya.

Penyelesaian

Isu ini kemudiannya dilaporkan dan dibetulkan dalam Java 9. Walau bagaimanapun, sehingga Java 9 dikeluarkan, penyelesaian diperlukan . Seperti yang dinyatakan dalam laporan pepijat JDK, penyelesaian berikut boleh digunakan:

DateTimeFormatter dtf =
  new DateTimeFormatterBuilder()
  .appendPattern("yyyyMMddHHmmss")
  .appendValue(ChronoField.MILLI_OF_SECOND, 3)
  .toFormatter();

Isu dan Implikasinya

Inti isu terletak pada cara pecahan saat dihuraikan apabila watak adalah bersebelahan. Penghuraian nilai bersebelahan hanya disokong oleh kaedah appendValue(...), yang menganggap perwakilan berangka. Kaedah appendFraction(...), yang digunakan secara dalaman oleh bahagian pecahan, tidak mengendalikan penghuraian nilai bersebelahan. Had ini menghalang tafsiran yang betul bagi pecahan saat apabila corak mengandungi digit bersebelahan.

Alternatif dan Kemas Kini

Walaupun penyelesaian di atas menangani isu ini, ia mungkin tidak sesuai untuk semua kes penggunaan. Alternatif lain termasuk:

  • Menggunakan SimpleDateFormat, tetapi ambil perhatian bahawa ia mungkin mentafsir pecahan secara salah.
  • Menunggu sehingga Java 9 (atau lebih baru) untuk pembetulan rasmi.
  • Menggunakan pustaka pihak ketiga seperti Joda-Time atau Time4J.

Kemas kini: Java 9 Fix

Dalam Java 9, isu itu telah diselesaikan. Pecahan saat kini boleh dihuraikan dengan betul menggunakan corak "SS" atau, untuk ketepatan yang lebih tinggi, menggunakan medan ChronoField.MICRO_OF_SECOND atau ChronoField.NANO_OF_SECOND.

Atas ialah kandungan terperinci Bolehkah Java.time Menghuraikan Pecahan Saat Sebelum Java 9?. 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