Я хотел бы сохранить временную метку в базе данных, не будучи преобразованной в локальный часовой пояс драйвером jdbc. В настоящее время для меня важны только MySQL и PostgreSQL, но я был бы признателен, если есть независимое от базы данных решение.JDBC/MySQL: сохранить временную метку всегда с помощью UTC
Пример:
// i want that to be saved as 1970-01-01 00:00:00
TimeStamp ts = new java.sql.Timestamp(0);
// gets transformed to local time by jdbc driver (in my case to 1970-01-01 01:00:00)
st.setTimestamp(0, new java.sql.Timestamp(0));
// only works using postgres (mysql connector seems to ignore the calendar)
// postgres => 1970-01-01 00:00:00
// mysql => 1970-01-01 01:00:0
Calendar calutc = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
st.setTimestamp(0, new java.sql.Timestamp(0), utccal);
Я уже пытался вычислить значение временной метки, которые получают преобразованный к правильному значению (например -3600000 => 1970-01-01 00:00:00 в моей временной зоне) но это не работает на postgres в датах, близких к дневным изменениям экономии времени.
Я использовал '& serverTimezone = UTC & useLegacyDatetimeCode = false' с успехом, без драйвера serverTimezone jdbc жаловался на неправильный часовой пояс. – snowindy
Полный URL-адрес, для справки: jdbc: mysql: // localhost: 3306/pm_func? CharacterEncoding = UTF-8 & useEncoding = true & autoReconnect = true & serverTimezone = UTC & useLegacyDatetimeCode = false – snowindy