Saya mencoba menggunakan java.util.Date
input sebagai dan kemudian membuat kueri dengannya - jadi saya perlu a java.sql.Date
.
Saya terkejut menemukan bahwa itu tidak dapat melakukan konversi secara implisit atau eksplisit - tetapi saya bahkan tidak tahu bagaimana saya akan melakukan ini, karena Java API masih cukup baru bagi saya.
import java.sql.*
dalam kode saya, menimpa java.util.date dan dengan demikian menyebabkan masalah ketika menetapkan nilai tanggal yang baik-baik saja dengan yang terakhir tetapi bukan yang pertama. HTHDATE
berarti hanya tanggal.Jawaban:
tl; dr
Jangan. Kedua kelas sudah ketinggalan zaman.
java.util.Date
&java.sql.Date
dengan JDBC 4.2 atau yang lebih baru.Contoh kueri dengan
PreparedStatement
.Penggantian:
Instant
dari padajava.util.Date
Keduanya mewakili momen di UTC. tapi sekarang dengan nanodetik, bukan milidetik.
LocalDate
dari padajava.sql.Date
Keduanya menunjukkan nilai hanya tanggal tanpa waktu dalam sehari dan tanpa zona waktu.
Detail
Jika Anda mencoba untuk bekerja dengan nilai hanya tanggal (tanpa waktu, tanpa zona waktu), gunakan
LocalDate
kelas daripadajava.util.Date
.waktu java
Di Java 8 dan yang lebih baru, kelas tanggal-waktu lama yang bermasalah yang dibundel dengan versi awal Java telah digantikan oleh paket java.time yang baru . Lihat Tutorial Oracle . Sebagian besar fungsi telah di-porting ke Java 6 & 7 di ThreeTen-Backport dan selanjutnya diadaptasi ke Android di ThreeTenABP .
Sebuah tipe data SQL
DATE
dimaksudkan untuk menjadi tanggal-satunya, dengan tidak ada waktu-of-hari dan tidak ada zona waktu. Java tidak pernah memiliki kelas seperti itu † sampaijava.time.LocalDate
di Jawa 8. Mari kita membuat nilai seperti itu dengan mendapatkan tanggal hari ini sesuai dengan zona waktu tertentu (zona waktu penting dalam menentukan tanggal sebagai hari baru fajar lebih awal di Paris daripada di Montréal, karena contoh).Pada titik ini, kita mungkin sudah selesai. Jika driver JDBC Anda sesuai dengan spesifikasi JDBC 4.2 , Anda harus bisa mengirimkan
LocalDate
viasetObject
padaPreparedStatement
untuk menyimpan ke bidang SQL DATE.Demikian juga, gunakan
ResultSet::getObject
untuk mengambil dari kolom SQL DATE keLocalDate
objek Java . Menentukan kelas dalam argumen kedua membuat kode Anda aman .Dengan kata lain, seluruh Pertanyaan ini tidak relevan di bawah JDBC 4.2 atau yang lebih baru.
Jika driver JDBC Anda tidak berkinerja dengan cara ini, Anda harus kembali ke konversi ke tipe java.sql.
Konversikan ke java.sql.Date
Untuk mengonversi, gunakan metode baru yang ditambahkan ke kelas tanggal-waktu yang lama. Kita dapat menelepon
java.sql.Date.valueOf(…)
untuk mengonversi aLocalDate
.Dan pergi ke arah lain.
Konversi dari
java.util.Date
Meskipun Anda harus menghindari menggunakan kelas waktu-tanggal yang lama, Anda mungkin dipaksa ketika bekerja dengan kode yang ada. Jika demikian, Anda dapat mengonversi ke / dari java.time.
Telusuri
Instant
kelas, yang mewakili momen dalam timeline di UTC. SebuahInstant
mirip ide untuk sebuahjava.util.Date
. Tetapi perhatikan bahwaInstant
memiliki resolusi hingga nanodetik sementarajava.util.Date
hanya memiliki resolusi milidetik .Untuk mengonversi, gunakan metode baru yang ditambahkan ke kelas lama. Sebagai contoh,
java.util.Date.from( Instant )
danjava.util.Date::toInstant
.Untuk menentukan tanggal, kita perlu konteks zona waktu. Untuk setiap momen tertentu, tanggalnya bervariasi di seluruh dunia berdasarkan zona waktu. Terapkan
ZoneId
untuk mendapatkanZonedDateTime
.Berpura-pura kelas † The java.sql.Date menjadi tanggal-hanya tanpa waktu-of-hari tetapi sebenarnya tidak waktu-of-hari, disesuaikan dengan waktu tengah malam. Membingungkan? Ya, kelas tanggal-waktu lama berantakan.
Tentang java.time
The java.time kerangka dibangun ke Jawa 8 dan kemudian. Kelas-kelas ini menggantikan tua merepotkan warisan kelas tanggal-waktu seperti
java.util.Date
,Calendar
, &SimpleDateFormat
.Proyek Joda-Time , sekarang dalam mode pemeliharaan , menyarankan migrasi ke kelas java.time .
Untuk mempelajari lebih lanjut, lihat Tutorial Oracle . Dan cari Stack Overflow untuk banyak contoh dan penjelasan. Spesifikasi adalah JSR 310 .
Anda dapat bertukar objek java.time secara langsung dengan database Anda. Gunakan driver JDBC yang sesuai dengan JDBC 4.2 atau yang lebih baru. Tidak perlu untuk string, tidak perlu untuk
java.sql.*
kelas.Di mana mendapatkan kelas java.time?
Proyek ThreeTen-Extra memperpanjang java.time dengan kelas tambahan. Proyek ini adalah ajang pembuktian untuk kemungkinan penambahan masa depan ke java.time. Anda mungkin menemukan beberapa kelas berguna di sini seperti
Interval
,YearWeek
,YearQuarter
, dan lebih .sumber
Sudahlah....
menjelaskannya. Tautannya adalah http://www.java2s.com/Tutorial/Java/0040__Data-Type/ConvertfromajavautilDateObjecttoajavasqlDateObject.htm
sumber
epochseconds
milidetik yaitu setelah1,JAN,1970
. Tetapi bagaimana jika kita ingin menyimpan tanggal seseorang sebelum tanggal ini .... atau sesuatu seperti0000-00-00 as default
Dengan jawaban lain, Anda mungkin memiliki masalah dengan info waktu (bandingkan tanggal dengan hasil yang tidak terduga!)
Saya menyarankan:
sumber
java.util.Date
,java.util.Calendar
, danjava.text.SimpleDateFormat
sekarang warisan , digantikan oleh java.time kelas dibangun ke Jawa 8 dan kemudian. Lihat Tutorial oleh Oracle .Fungsi ini akan mengembalikan tanggal SQL yang dikonversi dari objek tanggal java.
sumber
Konversi
java.util.Data
kejava.sql.Data
akan kehilangan jam, menit dan detik. Jadi jika memungkinkan, saya sarankan Anda menggunakanjava.sql.Timestamp
seperti ini:Untuk info lebih lanjut, Anda dapat memeriksa pertanyaan ini .
sumber
Dalam kasus saya memilih tanggal dari JXDatePicker (kalender java) dan menyimpannya dalam database sebagai tipe tanggal SQL, di bawah ini berfungsi dengan baik ..
java.sql.Date date = new java.sql.Date(pickedDate.getDate().getTime());
di mana pickDate adalah objek dari JXDatePicker
sumber
Fungsi ini akan mengembalikan tanggal SQL yang dikonversi dari objek tanggal java.
sumber
Format java.util.Date Anda terlebih dahulu. Kemudian gunakan tanggal yang diformat untuk mendapatkan tanggal di java.sql.Date
sumber
Di sini contoh mengkonversi Util Date ke Sql date dan ya ini adalah salah satu contoh apa yang saya gunakan dalam proyek saya mungkin dapat membantu Anda juga.
sumber
Saya seorang pemula: setelah banyak berlarian ini berhasil. Pikiran mungkin bermanfaat
sumber
java.util.Date
,java.util.Calendar
, danjava.text.SimpleDateFormat
sekarang warisan , digantikan oleh java.time kelas dibangun ke Jawa 8 dan kemudian. Lihat Tutorial oleh Oracle .Di sini javaDate adalah turunan dari java.util.Date
sumber
Metode untuk membandingkan 2 tanggal (util.date atau sql.date)
sumber
coba dengan ini
sumber
Saya pikir cara terbaik untuk mengkonversi adalah:
Jika Anda ingin memasukkan
dt
variabel ke tabel SQL yang dapat Anda lakukan:sumber
saya menggunakan kode berikut, silakan coba
tentukan format tanggal yang Anda inginkan misalnya
"DD-MM_YYYY"
atau'YYYY-mm-dd'
kemudian gunakan datatype Date java sebagaimaka itu akan mengurai tanggal Anda
sumber
Anda dapat menggunakan metode ini untuk mengkonversi tanggal util ke tanggal sql,
sumber
Saya mencoba pengkodean berikut yang berfungsi dengan baik.
sumber
Jika Anda menggunakan Mysql kolom tanggal dapat dilewatkan representasi String dari tanggal ini
jadi saya menggunakan DateFormatter Class untuk memformatnya dan kemudian mengaturnya sebagai String dalam pernyataan sql atau pernyataan yang disiapkan
di sini adalah ilustrasi kode:
String date = convertUtilDateToSqlDate (otherTransaction.getTransDate ());
// lalu sampaikan tanggal ini dalam pernyataan sql Anda
sumber