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.
Apabila cuba menghuraikan pecahan saat, seperti yang ditentukan oleh Corak "SS", pengecualian telah dilemparkan. Ini mengejutkan kerana dokumentasi menunjukkan bahawa ini sepatutnya berjaya.
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();
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.
Walaupun penyelesaian di atas menangani isu ini, ia mungkin tidak sesuai untuk semua kes penggunaan. Alternatif lain termasuk:
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!