Java 8's DateTimeFormatter bergelut untuk menghuraikan rentetan ISO 8601 yang tidak mempunyai titik dua antara jam dan minit dalam offset, menyebabkan kesukaran untuk pengguna cuba menukar rentetan seperti "2018-02-13T10:20:12.120 0000" ke dalam tarikh Java 8.
Sehingga Java 8 Pembetulan Pepijat:
Sehingga pepijat dalam Java 8 diselesaikan, gunakan penyelesaian berikut:
OffsetDateTime.parse( "2018-02-13T10:20:12.120+0000" , DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSX" ) )
Selepas Pembetulan Pepijat Java 8:
OffsetDateTime.parse( "2018-02-13T10:20:12.120+0000" )
Penggunaan Kelas yang Salah
Elakkan menggunakan kelas warisan seperti Tarikh, Kalendar dan SimpleDateFormat memihak kepada kelas java.time moden.
Gunakan OffsetDateTime untuk Nilai Offset Sahaja
Untuk nilai dengan offset tetapi tiada zon waktu, gunakan OffsetDateTime. Rentetan ISO 8601 biasanya mematuhi format standard yang digunakan oleh kelas java.time. Walau bagaimanapun, pepijat dalam Java 8 memerlukan penyelesaian:
Penyelesaian Hacky
Memanipulasi rentetan input untuk memasukkan kolon yang hilang:
String input = "2018-02-13T10:20:12.120+0000".replace( "+0000" , "+00:00" ); OffsetDateTime odt = OffsetDateTime.parse( input );
Penyelesaian yang Lebih Teguh
Tentukan DateTimeFormatter dengan corak yang jelas:
String input = "2018-02-13T10:20:12.120+0000" ; DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSX" ); OffsetDateTime odt = OffsetDateTime.parse( input , f );
Pertimbangan Tambahan
Pepijat Java 8 mempengaruhi penghuraian offset yang tiada titik bertindih antara jam dan minit. Isu ini mempengaruhi offset seperti 0000 tetapi bukan 00:00.
kelas java.time menggantikan kelas tarikh warisan dan dibina ke dalam Java 8 dan kemudian. Mereka menyediakan keupayaan pengendalian tarikh-masa yang lebih moden dan cekap.
Atas ialah kandungan terperinci Bagaimana untuk Menghuraikan Tarikh ISO 8601 dengan Kolon yang Hilang dalam Offset dalam Java 8?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!