MySQL - как хранить время с правильным часовым поясом? (с Java)
Я использую MySQL 5.0. Мне нужно хранить информацию о дате и времени в одном столбце. Я имею в виду использоватьDATETIME
или жеTIMESTAMP
тип столбца. Но у меня проблема с летне-зимней сменой времени.
Мой часовой пояс CET. Летом мы используем летнее время (CEST, это GMT + 2), а зимой мы используем зимнее время (CET, это GMT + 1). В день, когда летнее время превращается в зимнее (в этом году это было 28 октября), у нас есть время 2 часа ночи два раза. Последовательность времени в этот день:
... -> 1:00 CEST -> 2:00 CEST -> 2:00 CET (= 3:00 CEST) -> 3:00 CET -> ...
Так что, если у меня есть метка времени / datetime '2012-10-28 02:00:00 «Я»Я не могу точно сказать, представляет ли это время 2:00 утра в летнее время или в зимнее время.
У меня есть две разные даты Java:
Date d1 = new Date(1351382400000); // 2:00 CEST (summer-time)
Date d2 = new Date(1351386000000); // 2:00 CET (winter-time)
И когда я храню их в базе данных, используя стандартный формат метки времени / даты и времени (т.е.'yyyy-MM-dd HH:mm:ss'
), оба они хранят одни и те же данные2012-10-28 02:00:00 ', Но когда я получаю эти значения из базы данных обратно в переменные Date, я получаю две одинаковые даты. Таким образом, даты ввода были разными, но даты выхода равны.
То же самое происходит, если я используюFROM_UNIXTIME
функция для сохранения значения даты:FROM_UNIXTIME(1351382400)
а такжеFROM_UNIXTIME(1351386000)
, Значения хранятся в столбце базы данных (тип DATETIME или TIMESTAMP) как равные значения. Поэтому, когда я получаю эти значения в Javas Дата объекта Я снова получаю две равные даты (в зимнее время).
Есть ли способ сохранить часовой пояс в MySQL или как обращаться с информацией о часовом поясе в столбцах DATETIME / TIMESTAMP?
Конечно, я могу хранить значения BIGINT в базе данных с помощью unix-timestamp. Но я'мне интересно, если естьВ любом случае, как решить эту проблему с любым типом даты и времени MySQL.
Любая помощь или трюк приветствуется ... :)
Большое спасибо.
Хонза (спорак)
РЕДАКТИРОВАНИЕ № 1:
Если я попытался сохранить значения отметки времени, а затем извлечь значения этой отметки времени в java 's Дата, я снова получаю неверную дату. Позволять'скажем, у меня есть простая таблица со столбцом TIMESTAMP. Я храню данные в этой таблице следующим образом:
mysql> INSERT INTO `tab` (timestamp_column) VALUES
(FROM_UNIXTIME(1351382400)), // 2:00 CEST (summer-time)
(FROM_UNIXTIME(1351386000)); // 2:00 CET (winter-time)
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
Когда я получаю эти строки в объект даты Java, яЯ получаю две одинаковые даты, которые показывают 2:00 CET. И что'Более того - когда я получаю эти строки в MySQL, я снова получаю неправильные значения в MySQL:
mysql> SELECT UNIX_TIMESTAMP(timestamp_column) from tab;
+--------------------+
| UNIX_TIMESTAMP(ts) |
+--------------------+
| 1351386000 |
| 1351386000 |
+--------------------+
2 rows in set (0.00 sec)
Так что TIMESTAMP кажется мне немного бесполезным.