Rumah > pangkalan data > tutorial mysql > 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
Lepaskan: 2024-10-27 16:26:29
asal
805 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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