tl; dr
String sql = "SELECT CURRENT_TIMESTAMP ;
…
OffsetDateTime odt = myResultSet.getObject( 1 , OffsetDateTime.class ) ;
Hindari bergantung pada OS host atau JVM untuk zona waktu default
Saya sarankan Anda menulis semua kode Anda untuk secara eksplisit menyatakan zona waktu yang diinginkan / diharapkan. Anda tidak perlu bergantung pada zona waktu default JVM saat ini. Dan ketahuilah bahwa zona waktu default JVM saat ini dapat berubah kapan saja selama waktu proses , dengan kode apa pun di utas apa pun dari panggilan aplikasi apa pun TimeZone.setDefault. Panggilan semacam itu segera memengaruhi semua aplikasi dalam JVM tersebut.
java.time
Beberapa Jawaban lain benar, tetapi sekarang sudah ketinggalan zaman. Kelas tanggal-waktu yang mengerikan yang digabungkan dengan versi Java yang paling awal memiliki cacat, ditulis oleh orang-orang yang tidak memahami kerumitan dan seluk-beluk penanganan waktu-tanggal.
Kelas tanggal-waktu warisan telah digantikan oleh kelas java.time yang ditentukan di JSR 310.
Untuk mewakili zona waktu, gunakan ZoneId. Untuk merepresentasikan offset-from-UTC, gunakan ZoneOffset. Offset hanyalah beberapa jam-menit-detik di depan atau di belakang meridian utama. Zona waktu lebih dari itu. Zona waktu adalah sejarah perubahan masa lalu, sekarang, dan masa depan untuk offset yang digunakan oleh orang-orang di wilayah tertentu.
Saya perlu memaksakan operasi terkait waktu ke GMT / UTC
Untuk offset nol jam-menit-detik, gunakan konstanta ZoneOffset.UTC.
Instant
Untuk menangkap momen saat ini di UTC, gunakan Instant. Kelas ini mewakili momen dalam UTC, selalu dalam UTC menurut definisi.
Instant instant = Instant.now() ; // Capture current moment in UTC.
ZonedDateTime
Untuk melihat momen yang sama melalui jam dinding yang digunakan oleh orang-orang di wilayah tertentu, sesuaikan dengan zona waktu. Momen yang sama, titik yang sama di garis waktu, waktu jam dinding yang berbeda.
ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
Database
Anda menyebutkan database.
Untuk mengambil momen dari database, kolom Anda harus dari tipe data yang mirip dengan standar SQL TIMESTAMP WITH TIME ZONE. Mengambil objek, bukan string. Di JDBC 4.2 dan yang lebih baru, kita dapat bertukar objek java.time dengan database. The OffsetDateTimediperlukan oleh JDBC, sementara Instant& ZonedDateTimeadalah opsional.
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
Di sebagian besar database dan driver, saya rasa Anda akan mendapatkan momen seperti yang terlihat di UTC. Namun jika tidak, Anda dapat menyesuaikan dengan salah satu dari dua cara berikut:
- Ekstrak a
Instant: odt.toInstant()
- Sesuaikan dari offset yang diberikan ke offset nol: OffsetDateTime odtUtc = odt.withOffsetSameInstant (ZoneOffset.UTC); `.

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.
Untuk mempelajari lebih lanjut, lihat Tutorial Oracle . Dan cari Stack Overflow untuk banyak contoh dan penjelasan. Spesifikasinya adalah JSR 310 .
Proyek Joda-Time , sekarang dalam mode pemeliharaan , menyarankan migrasi ke kelas java.time .
Anda dapat bertukar objek java.time langsung dengan database Anda. Gunakan driver JDBC yang sesuai dengan JDBC 4.2 atau yang lebih baru. Tidak perlu string, tidak perlu java.sql.*kelas.
Dimana mendapatkan kelas java.time?