LocalDate date4 = ZonedDateTime
.parse(date, DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH))
.toLocalDate();
java.sql.Date date5 = java.sql.Date.valueOf(date4);
Saya menggunakan kelas modern di java.time
kemasan. Anda perhatikan bahwa kodenya tidak hanya lebih sederhana, setelah Anda mengenal gaya penulisan yang lancar dari kelas yang lebih baru, itu juga lebih jelas.
Jika Anda ingin menjadi 100% modern, Anda juga harus memeriksa apakah driver MySQL JDBC terbaru Anda tidak akan menerima LocalDate
langsung tanpa konversi ke java.sql.Date
. Seharusnya.
Beberapa detail yang perlu diperhatikan
- Jika Anda memerlukan kode untuk dijalankan di komputer di luar kendali Anda, selalu berikan lokal ke formatter Anda, atau string tanggal Anda tidak dapat diuraikan di komputer dengan lokal yang tidak berbahasa Inggris. Anda dapat menggunakan
Locale.ROOT
untuk lokal netral lokal (berbahasa Inggris). - Jika bisa, hindari singkatan zona waktu tiga huruf. Banyak yang ambigu. EET benar-benar hanya setengah zona waktu karena beberapa tempat di mana digunakan adalah pada EEST (waktu musim panas) sekarang. Lebih baik menggunakan ID zona waktu yang lama seperti
Europe/Bucharest
atau offset dari UTC seperti+02:00
.
Poin ini valid tidak masalah jika Anda menggunakan DateTimeFormatter
atau SimpleDateFormat
.
Jika Anda tidak dapat atau tidak ingin beralih ke kelas baru yang disarankan, perbaikan kode Anda adalah:
SimpleDateFormat formatnow
= new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH);
SimpleDateFormat formatneeded = new SimpleDateFormat("yyyy-MM-dd");
Saya menggunakan huruf kecil zzz
karena ini didokumentasikan agar cocok dengan nama zona waktu tiga huruf, saya tahu huruf besar ZZZ
bekerja juga. Saya telah menambahkan lokal. Dan mungkin yang paling penting, dalam format yang diperlukan saya telah mengubah YYYY
(tahun berdasarkan minggu) menjadi yyyy
(tahun kalender) dan DD
(hari dalam setahun) hingga dd
(hari bulan). Semua huruf tersebut ada di dokumentasi
.