Tôi gặp vấn đề tương tự và phải mất gần một ngày để theo dõi. Tôi đang lưu trữ các cột DateTime trong MySQL. Ví dụ RDS, chạy trong Đám mây của Amazon, được đặt chính xác để có dấu thời gian UTC theo mặc định.
Các Buggy Mã là:
String startTime = "2013-02-01T04:00:00.000Z";
DateTime dt = ISODateTimeFormat.dateTimeParser().parseDateTime(startTime);
PreparedStatement stmt = connection.prepareStatement(insertStatementTemplate);
Timestamp ts = new Timestamp(dt.getMillis());
stmt.setTimestamp(1, ts, Calendar.getInstance(TimeZone.getTimeZone("UTC")));
Trong đoạn mã trên, các ".setTimestamp" cuộc gọi sẽ KHÔNG mất ngày như một ngày UTC!
Sau nhiều giờ điều tra, điều này hóa ra lại là lỗi đã biết trong Trình điều khiển Java/MySQL. Các cuộc gọi đến setTimestamp listerally chỉ bỏ qua các tham số Lịch.
Để khắc phục điều này, hãy thêm "useLegacyDatetimeCode = false" vào URI cơ sở dữ liệu của bạn.
private final static String DatabaseName =
"jdbc:mysql://foo/?useLegacyDatetimeCode=false";
Ngay sau khi tôi làm điều đó, ngày được lưu trữ trong cơ sở dữ liệu MySQL ở dạng UTC đúng, thay vì trong múi giờ của máy trạm cục bộ của tôi.
Nguồn
2013-03-20 20:08:50
Bạn đang sử dụng Hibernate hoặc tương tự như giao diện cơ sở dữ liệu? –