SimpleDateFormatter.parse Memberi Output dalam Format Berbeza daripada Yang Ditentukan
Soalan ini timbul apabila cuba menukar cap masa UNIX kepada tarikh dengan tertentu format menggunakan SimpleDateFormat. Walaupun menetapkan format yang diingini, hasil sdf.parse muncul dalam format yang berbeza.
Penyelesaian:
Untuk menyelesaikan isu ini, adalah disyorkan untuk mengelak daripada melepasi tarikh sebagai rentetan ke pangkalan data MySQL. Sebaliknya, ia lebih selamat dan lebih ringkas untuk menghantar objek tarikh, terutamanya kejadian daripada API tarikh dan masa Java (java.time). Objek LocalDateTime sesuai dalam kes ini:
<code class="java">String ep = "a1527069600"; long epoch = Long.parseLong(ep.substring(1)); Instant inst = Instant.ofEpochSecond(epoch); LocalDateTime ldt = inst.atZone(ZoneId.of("Asia/Calcutta")).toLocalDateTime();</code>
Untuk storan pangkalan data, LocalDateTime mewakili datetime dalam format '2018-05-23T15:30'.
Untuk mengekalkan LocalDateTime dalam Pangkalan data MySQL:
<code class="java">PreparedStatement ps = myDatabaseConnection.prepareStatement( "insert into my_table (my_date_time) values (?)"); ps.setObject(1, ldt);</code>
Alternatif untuk Nilai UTC:
Jika nilai pangkalan data harus disimpan dalam UTC (Universal Time Coordinated), gunakan penukaran berikut:
<code class="java">LocalDateTime ldt = inst.atOffset(ZoneOffset.UTC).toLocalDateTime();</code>
Kelebihan Menggunakan java.time:
Atas ialah kandungan terperinci Mengapa SimpleDateFormat.parse Mengembalikan Format Berbeza Daripada Yang Ditentukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!