Konversi Antara java.time.Instant dan java.sql.Timestamp

1. Ikhtisar

Kedua java.time.Instant dan java.sql.Timestamp kelas merupakan titik pada timeline di UTC. Dengan kata lain, mereka mewakili jumlah nanodetik sejak zaman Jawa.

Dalam tutorial singkat ini, kami akan mengonversi satu sama lain dengan menggunakan metode Java bawaan.

2. Mengubah Instan ke Stempel Waktu dan Kembali

Kita dapat menggunakan Timestamp.from () untuk mengubah Instant s menjadi Timestamps:

Instant instant = Instant.now(); Timestamp timestamp = Timestamp.from(instant); assertEquals(instant.toEpochMilli(), timestamp.getTime());

Dan sebaliknya, kita dapat menggunakan Timestamp.toInstant () untuk mengonversi Stempel Waktu menjadi Instan :

instant = timestamp.toInstant(); assertEquals(instant.toEpochMilli(), timestamp.getTime());

Apa pun itu, Instan dan Stempel Waktu mewakili titik yang sama di garis waktu.

Selanjutnya, mari kita lihat interaksi antara kedua kelas dan zona waktu.

3. Perbedaan Metode toString ()

Memanggil toString () pada Instan dan Stempel Waktu berperilaku berbeda sehubungan dengan zona waktu. Instant.toString () mengembalikan waktu dalam zona waktu UTC. Di sisi lain, Timezone.toString () mengembalikan waktu dalam zona waktu mesin lokal.

Mari kita lihat apa yang kita dapatkan saat memanggil toString () pada instan dan zona waktu masing-masing:

Instant (in UTC): 2018-10-18T00:00:57.907Z Timestamp (in GMT +05:30): 2018-10-18 05:30:57.907

Di sini, timestamp.toString () menghasilkan waktu yang 5 jam 30 menit setelah waktu dikembalikan oleh instant.toString (). Ini karena zona waktu mesin lokal berada pada zona waktu GMT +5: 30.

Keluaran metode toString () berbeda, tetapi stempel waktu dan instan mewakili titik yang sama di garis waktu .

Kami juga dapat memverifikasi ini dengan mengubah Stempel Waktu ke zona waktu UTC:

DateFormat df = DateFormat.getDateTimeInstance(); df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:SS'Z'"); df.setTimeZone(TimeZone.getTimeZone("UTC")); assertEquals(instant.toString(), df.format(timestamp).toString());

4. Kesimpulan

Dalam tutorial singkat ini, kami melihat cara mengonversi antara kelas java.time.Instant dan java.sql.Timestamp di Java menggunakan metode bawaan .

Kami juga melihat bagaimana zona waktu mempengaruhi bagaimana output berubah.

Dan, seperti biasa, contoh kode lengkap tersedia di GitHub.