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

1. Gambaran keseluruhan

Kedua-dua java.time.Instant dan java.sql.Timestamp kelas mewakili titik pada garis masa di UTC. Dengan kata lain, mereka mewakili bilangan nanodetik sejak zaman Jawa.

Dalam tutorial ringkas ini, kita akan menukar satu dengan yang lain dengan menggunakan kaedah Java yang terbina dalam.

2. Menukar Segera ke Cap Waktu dan Kembali

Kita boleh menggunakan Timestamp.from () untuk menukar Instant s menjadi Timestamps:

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

Dan sebaliknya, kita boleh menggunakan Timestamp.toInstant () untuk menukar Timestamp s menjadi Instant s:

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

Walau bagaimanapun, Stempel Segera dan Waktu mewakili titik yang sama pada garis masa.

Seterusnya, mari kita lihat interaksi antara dua kelas dan zon waktu.

3. toString () Perbezaan Kaedah

Memohon toString () pada Segera dan Cap Masa berkelakuan berbeza berkenaan dengan zon waktu. Instant.toString () mengembalikan masa dalam zon waktu UTC. Sebaliknya, Timezone.toString () mengembalikan masa di zon waktu mesin tempatan.

Mari kita lihat apa yang kita dapat apabila memanggil toString () pada segera dan zon 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 masa iaitu 5 jam 30 minit setelah waktu dikembalikan oleh instant.toString (). Ini kerana zon waktu mesin tempatan berada pada zon waktu GMT +5: 30.

Keluaran kaedah toString () berbeza, tetapi kedua cap waktu dan seketika mewakili titik yang sama pada garis masa .

Kami juga dapat mengesahkannya dengan menukar Cap Waktu ke zon 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 ini cepat, kita melihat bagaimana untuk menukar antara java.time.Instant dan java.sql.Timestamp kelas di Jawa menggunakan kaedah bina dalam.

Kami juga melihat bagaimana zon waktu mempengaruhi bagaimana output berubah.

Dan, seperti biasa, contoh kod lengkap boleh didapati di GitHub.