SimpleDateFormat Parsing Date dengan 'Z' Literal
Apabila cuba menghuraikan tarikh dalam format ISO 8601 menggunakan SimpleDateFormat, ia mungkin gagal dengan betul mengendalikan literal 'Z', yang menandakan UTC sebagai titik rujukan pilihan. Sebagai contoh, menghuraikan rentetan "2010-04-05T17:16:00Z" menggunakan corak "yyyy-MM-dd'T'HH:mm:ss" akan menghasilkan waktu tempatan yang salah.
The corak tradisional "yyyy-MM-dd'T'HH:mm:ssz" dan "yyyy-MM-dd'T'HH:mm:ssZ" juga tidak mencukupi untuk menghuraikan tarikh dengan literal 'Z'. Tingkah laku ini mungkin kelihatan berlawanan dengan intuitif kerana literal 'Z' secara jelas menunjukkan UTC.
Penyelesaian
Sebelum Java 7, menghuraikan tarikh dengan literal 'Z' memerlukan tetapan secara eksplisit TimeZone pada objek SimpleDateFormat. Walau bagaimanapun, dalam Java 7 dan ke atas, corak "yyyy-MM-dd'T'HH:mm:ssX" boleh digunakan untuk menghuraikan dan menggunakan akhiran zon waktu UTC dengan betul.
Contohnya:
<code class="java">SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX"); Date date = sdf.parse("2010-04-05T17:16:00Z");</code>
Ini akan menghuraikan tarikh dengan betul sebagai masa UTC.
Alternatif
Alternatif lain ialah menggunakan pakej java.time yang diperkenalkan dalam Java 8 , yang menyediakan API tarikh dan masa yang lebih moden dan komprehensif. Kod berikut menunjukkan penggunaan java.time untuk menghuraikan tarikh:
<code class="java">import java.time.Instant; import java.time.ZonedDateTime; String dateString = "2010-04-05T17:16:00Z"; Instant instant = Instant.parse(dateString); ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("Z"));</code>
Pendekatan ini menghapuskan keperluan untuk corak kompleks atau tetapan zon waktu yang jelas, kerana java.time mengendalikan zon waktu UTC secara asli.
Atas ialah kandungan terperinci Bagaimana Menghuraikan Tarikh dengan Betul dengan \'Z\' Literal dalam Java menggunakan SimpleDateFormat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!