Rumah  >  Artikel  >  pangkalan data  >  Mengapa SimpleDateFormat.parse Menghasilkan Output Tidak Dijangka Apabila Menukar Cap Masa UNIX?

Mengapa SimpleDateFormat.parse Menghasilkan Output Tidak Dijangka Apabila Menukar Cap Masa UNIX?

Barbara Streisand
Barbara Streisandasal
2024-10-27 16:26:29708semak imbas

Why Does SimpleDateFormat.parse Produce Unexpected Output When Converting UNIX Timestamps?

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!

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