Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

LocalDateTime , ZonedDateTime dan Timestamp

Stempel waktu memperpanjang Date untuk memberikan akurasi nanodetik. Baik Date atau Timestamp dirancang untuk merujuk ke zona waktu tertentu sebagai ZoneDateTime .

Jika Anda perlu mengonversi ZonedDateTime -> Timestamp Anda harus membuang informasi zona waktu/offset. Mis.

LocalDateTime withoutTimezone = zoneDateTime.toLocalDateTime();
Timestamp timestamp = Timestamp.valueOf(withoutTimezone));

dan untuk mengonversi Timestamp -> ZonedDateTime anda perlu menentukan offset:

LocalDateTime withoutTimezone = sqlTimestamp.toLocalDateTime();
ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("+03:00"));

atau zona waktu:

ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("Europe/Paris"));

Jika niat Anda adalah untuk menyimpan ZonedDateTime variabel dalam database dan mempertahankan berbagai zona waktu yang ditentukan di sana, saya sarankan merancang database Anda sesuai. Saran:

  1. Gunakan kolom dengan tipe DATETIME untuk menyimpan LocalDateTime dan VARCHAR menyimpan zona waktu seperti "Europe/Paris" atau SMALLINT menghemat offset dalam hitungan menit.
  2. Konversi ZonedDateTime ke String dan simpan dalam VARCHAR kolom seperti "2017-05-16T14:12:48.983682+01:00[Europe/London]" . Anda kemudian harus menguraikannya saat membaca dari database.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa saya mendapatkan kesalahan ini 'Komunikasi link failure The last packet sent...' saat menyambungkan ke MySQL dengan Java (Netbeans)?

  2. Periksa apakah database mysql ada, lakukan tindakan berdasarkan hasil

  3. MySQL tidak memasukkan garis miring terbalik

  4. MySQL ALTER TABLE hang

  5. Filter menurut COUNT(*)?