Di sisi Java, tanggal biasanya diwakili oleh (dirancang dengan buruk, tetapi selain itu) java.util.Date
. Ini pada dasarnya didukung oleh Epoch time
dalam rasa long
, juga dikenal sebagai stempel waktu. Ini berisi informasi tentang bagian tanggal dan waktu. Di Java, presisinya dalam milidetik.
Di sisi SQL, ada beberapa tipe tanggal dan waktu standar, DATE
, TIME
dan TIMESTAMP
(di beberapa DB juga disebut DATETIME
), yang direpresentasikan dalam JDBC sebagai java.sql.Date
, java.sql.Time
dan java.sql.Timestamp
, semua subclass dari java.util.Date
. Presisinya bergantung pada DB, seringkali dalam milidetik seperti Java, tetapi bisa juga dalam hitungan detik.
Berbeda dengan java.util.Date
, java.sql.Date
hanya berisi informasi tentang bagian tanggal (tahun, bulan, hari). Time
hanya berisi informasi tentang bagian waktu (jam, menit, detik) dan Timestamp
berisi informasi tentang kedua bagian, seperti java.util.Date
tidak.
Praktik normal untuk menyimpan cap waktu di DB (dengan demikian, java.util.Date
di sisi Java dan java.sql.Timestamp
di sisi JDBC) adalah menggunakan PreparedStatement#setTimestamp()
.
java.util.Date date = getItSomehow();
Timestamp timestamp = new Timestamp(date.getTime());
preparedStatement = connection.prepareStatement("SELECT * FROM tbl WHERE ts > ?");
preparedStatement.setTimestamp(1, timestamp);
Praktik normal untuk mendapatkan cap waktu dari DB adalah dengan menggunakan ResultSet#getTimestamp()
.
Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.