Format Output yang berbeza daripada SimpleDateFormatter.parse
Dalam program Java, kelas SimpleDateFormat digunakan untuk menukar tarikh kepada format yang ditentukan. Walau bagaimanapun, telah diperhatikan bahawa dalam beberapa kes, menghuraikan tarikh menggunakan SimpleDateFormatter.parse boleh menghasilkan format yang berbeza daripada yang ditentukan semasa pemformatan.
Isu ini timbul apabila menukar cap masa UNIX kepada rentetan tarikh. Berikut ialah contoh ringkas:
<code class="java">String ep ="a1527069600"; Long epoch = Long.parseLong(ep.substring(1, ep.length())); Date dt = new Date(epoch*1000L); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a"); sdf.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta")); System.out.println("SDF.Format - "+sdf.format(dt)); System.out.println("SDF.parse - "+sdf.parse(sdf.format(dt)));</code>
Dalam contoh ini, manakala format yang ditentukan untuk sdf ialah "dd/MM/yyyy hh:mm:ss a", output sdf.parse adalah dalam format yang berbeza , "Rabu 23 Mei 15:30:00 IST 2018."
Penyelesaian
Untuk menyelesaikan isu ini, elakkan menghantar rentetan tarikh ke pangkalan data MySQL. Sebaliknya, gunakan objek tarikh. Java menyediakan API java.time untuk pengendalian tarikh dan masa moden. Untuk senario khusus anda, anda boleh menggunakan objek LocalDateTime:
<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(); PreparedStatement ps = myDatabaseConnection.prepareStatement( "insert into my_table (my_date_time) values (?)"); ps.setObject(1, ldt);</code>
Pendekatan ini memastikan pemformatan tarikh yang konsisten dan menghapuskan isu penghuraian yang dihadapi dengan SimpleDateFormatter.parse.
Atas ialah kandungan terperinci Mengapa SimpleDateFormat.parse Menghasilkan Output Tidak Dijangka Apabila Menukar Cap Masa UNIX?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!