Masalah:
Menghuraikan tarikh- rentetan masa menggunakan SimpleDateFormat gagal pada peranti tertentu, mengakibatkan "Tarikh tidak boleh dihuraikan" ralat.
Analisis:
SimpleDateFormat memerlukan parameter Locale untuk menentukan konvensyen bahasa dan budaya untuk penghuraian tarikh. Jika tiada Tempatan ditentukan, Tempatan lalai sistem digunakan. Ini boleh menyebabkan ketidakkonsistenan penghuraian pada peranti dengan tetapan Tempatan yang berbeza.
Penyelesaian:
Penjelasan Terperinci:
Tarikh yang diberikan -tali masa ("24 Okt 2016 7:31 malam") adalah dalam bahasa Inggeris. Walau bagaimanapun, jika Tempatan lalai sistem bukan bahasa Inggeris (cth., dalam kes telefon Perancis), tika SimpleDateFormat lalai akan gagal untuk menghuraikannya.
Java 8 (DateTimeFormatter):
Dalam Java 8 , gunakan DateTimeFormatter dengan Locale eksplisit untuk menghuraikan rentetan tarikh-masa tersuai. Elakkan daripada menggunakan Pemformat yang dipratentukan, yang tidak menerima Tempatan. Contohnya:
DateTimeFormatter dtf = new DateTimeFormatterBuilder() .parseCaseInsensitive() .appendPattern("d MMM uuuu h:m a") .toFormatter(Locale.ENGLISH); LocalDateTime ldt = LocalDateTime.parse(strDateTime, dtf);
Java 6/7 (ThreeTen-Backport):
Jika terperangkap dengan Java 6 atau Java 7, gunakan ThreeTen-Backport untuk backport Fungsi DateTimeFormatter.
Tambahan Nota:
Atas ialah kandungan terperinci Mengapa SimpleDateFormat Saya Gagal Menghuraikan Tarikh, dan Bagaimana Saya Boleh Membetulkannya Menggunakan Locale dan DateTimeFormatter?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!