Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

LocalDateTime, ZonedDateTime và Timestamp

Dấu thời gian mở rộng Date để cung cấp độ chính xác nano giây. Cả Date cũng không phải Timestamp được thiết kế để tham chiếu đến một múi giờ cụ thể là ZoneDateTime .

Nếu bạn cần chuyển đổi ZonedDateTime -> Timestamp bạn sẽ phải loại bỏ múi giờ / thông tin bù đắp. Ví dụ:

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

và để chuyển đổi Timestamp -> ZonedDateTime bạn cần chỉ định một khoảng chênh lệch:

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

hoặc múi giờ:

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

Nếu ý định của bạn là lưu ZonedDateTime các biến trong cơ sở dữ liệu và duy trì các múi giờ khác nhau được chỉ định ở đó, tôi khuyên bạn nên thiết kế cơ sở dữ liệu của mình cho phù hợp. Gợi ý:

  1. Sử dụng một cột thuộc loại DATETIME để lưu LocalDateTime và một VARCHAR lưu múi giờ như "Europe/Paris" hoặc SMALLINT tiết kiệm một khoản bù đắp trong vài phút.
  2. Chuyển đổi ZonedDateTime thành một String và lưu trong VARCHAR cột như "2017-05-16T14:12:48.983682+01:00[Europe/London]" . Sau đó, bạn sẽ phải phân tích cú pháp khi đọc từ cơ sở dữ liệu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Bỏ qua một cột đã chọn khi sử dụng DISTINCT

  2. Các cấu trúc giống như hướng đối tượng trong cơ sở dữ liệu quan hệ

  3. mysql cập nhật nhiều cột với cùng một ngay bây giờ ()

  4. Sao chép cơ sở dữ liệu mysql từ máy tính này sang máy tính khác

  5. Lỗi ASP.NET/Identity:Loại thực thể ApplicationUser không phải là một phần của mô hình cho ngữ cảnh hiện tại