Дата в UTC в mysql - PullRequest
       6

Дата в UTC в mysql

4 голосов
/ 23 мая 2011

У меня есть таблица с полем с типом данных DATETIME. Я сохраняю запись в этой таблице, используя Java, и вычисляю текущую дату следующим образом.

Date date = Calendar.getInstance(TimeZone.getTimeZone("UTC")).getTime();

Но когда я проверяю свою таблицу, она снова конвертирует это время в местный часовой пояс.

Может кто-нибудь объяснить мне, как хранить дату в часовом поясе UTC в базе данных.

@ код

У меня есть сущность БД 'Referral', соответствующая таблице с типом данных члена даты как java.util.Date и использующая hibernate для ее сохранения.

Referral ref = new Referral();
ref.setCreationDate(Calendar.getInstance(TimeZone.getTimeZone("UTC")).getTime());
referralDAO.save(ref);

Спасибо

Jitendra

Ответы [ 2 ]

2 голосов
/ 25 мая 2011

Дата на Java просто длинная.Это агностик любых часовых поясов.Когда вы передаете свою дату / время в базу данных через драйвер JDBC, она интерпретирует его как время в часовом поясе сеанса, который является вашим часовым поясом JVM.

Некоторые базы данных, такие как Oracle и PostgreSQL, имеют тип данных TIMESTAMP WITHЧАСОВОЙ ПОЯС.Я не верю, что MySQL имеет это.Вы можете либо переключить свой часовой пояс JVM на UTC, либо использовать строковое поле и отформатировать дату с помощью SimpleDateFormat.

2 голосов
/ 23 мая 2011

MySql DATETIME хранится независимо от часового пояса. Он просто хранит год / месяц / день / час / минуту / секунду

Как вы интерпретируете эту информацию, зависит от вас и вашего заявления. Если вы храните его как UTC, то при извлечении вы должны также интерпретировать его как UTC.

Возможно, вас заинтересует этот вопрос SO: Как узнать текущую дату и время в формате UTC или GMT на Java?

Как уже упоминалось в ответе на этот вопрос:

java.util.Date: всегда в UTC. Что заставляет вас думать, что это по-местному время? Я подозреваю, что проблема в том, что вы отображаете это через экземпляр календаря, который использует местный часовой пояс, или, возможно, используя Date.toString (), который также использует местный часовой пояс.

...