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 кажется мне немного бесполезным.

Ответы на вопрос(3)

Ваш ответ на вопрос