java.time
Pendekatan modern menggunakan kelas java.time yang menggantikan kelas tanggal-waktu lama yang merepotkan yang digabungkan dengan versi Java yang paling awal.
The java.sql.Timestampkelas adalah salah satu kelas warisan. Tidak lagi dibutuhkan. Sebagai gantinya gunakan Instantatau kelas java.time lainnya secara langsung dengan database Anda menggunakan JDBC 4.2 dan yang lebih baru.
The Instantkelas merupakan saat di timeline di UTC dengan resolusi nanodetik (hingga sembilan (9) angka dari pecahan desimal).
Instant instant = myResultSet.getObject( … , Instant.class ) ;
Jika Anda harus beroperasi dengan yang sudah ada Timestamp, segera ubah menjadi java.time melalui metode konversi baru yang ditambahkan ke kelas lama.
Instant instant = myTimestamp.toInstant() ;
Untuk menyesuaikan dengan zona waktu lain, tentukan zona waktu sebagai ZoneIdobjek. Tentukan nama zona waktu yang tepat dalam format continent/region, seperti America/Montreal,Africa/Casablanca , atau Pacific/Auckland. Jangan pernah menggunakan 3-4 huruf pseudo-zone seperti ESTatau ISTkarena itu bukan zona waktu yang sebenarnya, tidak terstandarisasi, dan bahkan tidak unik (!).
ZoneId z = ZoneId.of( "America/Montreal" ) ;
Terapkan ke Instantuntuk menghasilkan ZonedDateTimeobjek.
ZonedDateTime zdt = instant.atZone( z ) ;
Untuk menghasilkan string untuk ditampilkan kepada pengguna, telusuri Stack Overflow untuk DateTimeFormattermenemukan banyak diskusi dan contoh.
Pertanyaan Anda benar-benar tentang pergi ke arah lain, dari entri data pengguna ke objek tanggal-waktu. Umumnya paling baik untuk memecah entri data Anda menjadi dua bagian, tanggal dan waktu.
LocalDate ld = LocalDate.parse( dateInput , DateTimeFormatter.ofPattern( "M/d/uuuu" , Locale.US ) ) ;
LocalTime lt = LocalTime.parse( timeInput , DateTimeFormatter.ofPattern( "H:m a" , Locale.US ) ) ;
Pertanyaanmu tidak jelas. Apakah Anda ingin mengartikan tanggal dan waktu yang dimasukkan oleh pengguna sebagai UTC? Atau di zona waktu lain?
Jika yang Anda maksud adalah UTC, buat file OffsetDateTime dengan offset menggunakan konstanta untuk UTC ZoneOffset.UTC,.
OffsetDateTime odt = OffsetDateTime.of( ld , lt , ZoneOffset.UTC ) ;
Jika yang Anda maksud zona waktu lain, gabungkan dengan objek zona waktu, a ZoneId . Tapi zona waktu yang mana? Anda mungkin mendeteksi zona waktu default. Atau, jika penting, Anda harus mengonfirmasi dengan pengguna untuk memastikan niat mereka.
ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ;
Untuk mendapatkan objek yang lebih sederhana yang selalu dalam UTC menurut definisi, ekstrak file Instant .
Instant instant = odt.toInstant() ;
…atau…
Instant instant = zdt.toInstant() ;
Kirim ke database Anda.
myPreparedStatement.setObject( … , instant ) ;
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 java.time kelas .
Untuk mempelajari lebih lanjut, lihat Tutorial Oracle . Dan cari Stack Overflow untuk banyak contoh dan penjelasan. Spesifikasinya adalah JSR 310 .
Dimana mendapatkan kelas java.time?
Proyek ThreeTen-Extra memperluas java.time dengan kelas tambahan. Proyek ini adalah tempat pembuktian untuk kemungkinan penambahan java.time di masa mendatang. Anda mungkin menemukan beberapa kelas berguna di sini seperti Interval, YearWeek, YearQuarter, dan lebih .