Rumah >Java >javaTutorial >Bagaimana untuk Menghuraikan Tarikh ISO 8601 dengan Kolon yang Hilang dalam Offset dalam Java 8?

Bagaimana untuk Menghuraikan Tarikh ISO 8601 dengan Kolon yang Hilang dalam Offset dalam Java 8?

Linda Hamilton
Linda Hamiltonasal
2024-11-02 21:30:30500semak imbas

How to Parse ISO 8601 Dates with Missing Colon in Offset in Java 8?

Menghuraikan Data dalam Format ISO 8601 Tanpa Tanda Titik dalam Offset

Masalah

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.

Penyelesaian

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" )

Penjelasan Terperinci

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

  • Sentiasa gunakan offset dengan titik bertindih dan kedua-dua jam dan minit.
  • Ekstrak objek Segera untuk mewakili nilai dalam UTC.
  • Gunakan zon waktu untuk melihat detik melalui lensa masa jam dinding kawasan tertentu.

Mengenai Pepijat Java 8

Pepijat Java 8 mempengaruhi penghuraian offset yang tiada titik bertindih antara jam dan minit. Isu ini mempengaruhi offset seperti 0000 tetapi bukan 00:00.

Java.time

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!

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