Rumah > Java > javaTutorial > teks badan

Mengapa Sukar untuk Menghuraikan Rentetan ISO 8601 dalam Java 8 Apabila Offset Kekurangan Titik Bertitik?

Susan Sarandon
Lepaskan: 2024-10-31 02:37:29
asal
332 orang telah melayarinya

Why Is It Difficult to Parse ISO 8601 Strings in Java 8 When the Offset Lacks a Colon?

Kesukaran Menghuraikan Rentetan ISO 8601 dalam Java 8: Kolon Hilang dalam Offset

Fungsi penghuraian tarikh dan masa Java boleh mengecewakan, terutamanya apabila berurusan dengan rentetan berformat ISO 8601 yang tidak mempunyai titik bertindih dalam offset. Mari kita teroka isu ini dan sediakan penyelesaian menggunakan API java.time baharu.

Penerangan Masalah:

Apabila cuba menghuraikan rentetan tarikh seperti "2018-02-13T10 :20:12.120 0000" menggunakan kelas java.util.Date warisan, proses ini berjaya dengan lancar.

Date date = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSZZZ")
                      .parse("2018-02-13T10:20:12.120+0000");
Salin selepas log masuk

Walau bagaimanapun, format yang sama gagal apabila menggunakan kelas ZonedDateTime yang lebih baharu daripada java.time.

ZonedDateTime dateTime = ZonedDateTime.parse("2018-02-13T10:20:12.120+0000",
                   DateTimeFormatter.ofPattern("yyyy-MM-dd'T'hh:mm:ss.SSSZZZ"));
Salin selepas log masuk

Penyelesaian:

Masalahnya terletak pada penggunaan kelas yang salah untuk menghurai. Daripada ZonedDateTime, yang mewakili zon masa sepenuh masa, anda harus menggunakan OffsetDateTime untuk kes yang melibatkan hanya offset daripada UTC.

OffsetDateTime odt = OffsetDateTime.parse( 
    "2018-02-13T10:20:12.120+0000" , 
    DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSX" )
);
Salin selepas log masuk

Penyelesaian Pepijat Sementara:

Malangnya , disebabkan pepijat dalam Java 8, anda mungkin menghadapi masalah semasa menghuraikan rentetan mengimbangi yang menghilangkan titik bertindih antara jam dan minit. Sebagai penyelesaian, anda boleh melakukan salah satu daripada yang berikut:

  1. Godam: Gantikan titik bertindih yang hilang dalam rentetan input.

    String input = "2018-02-13T10:20:12.120+0000".replace( "+0000" , "+00:00" );
    Salin selepas log masuk
  2. Tentukan Corak Pemformatan: Gunakan corak pemformatan yang jelas semasa membina DateTimeFormatter.

    String input = "2018-02-13T10:20:12.120+0000" ;
    DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSX" );
    Salin selepas log masuk

Pertimbangan Tambahan:

Jika anda memerlukan nilai dalam UTC, ekstrak objek Segera. Untuk masa setempat, gunakan zon waktu menggunakan kelas ZonedDateTime.

Kesimpulan:

Dengan memahami kelas yang sesuai dan mengendalikan pepijat, anda boleh menghuraikan dan memanipulasi tarikh dengan berkesan dalam format ISO 8601 menggunakan API java.time. Ingatlah untuk menggunakan kelas yang lebih baharu apabila mungkin untuk mengelakkan isu pemformatan tarikh lama.

Atas ialah kandungan terperinci Mengapa Sukar untuk Menghuraikan Rentetan ISO 8601 dalam Java 8 Apabila Offset Kekurangan Titik Bertitik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan