2015-03-23 3 views
0

Я работаю над простым управлением БД, тип datetime должен преобразовать время в UTC для хранения & конвертировать обратно в локальное время клиентской зоны во время извлечения.datetime не работает согласно документации

Но это не работает.

Мой запрос здесь:

insert into table_name (date) values (now()) 

мое текущее время:

2015-03-23 18:42:43 (local time, IST +5:30) 

Я ожидал 2015-03-23 ​​13:12:43 в базе данных, но не так, то просто сохраняя то же самое, что не конвертируется в UTC.

Даже при извлечении он просто выдаёт то же значение, что и в БД.

Может кто-нибудь дать представление о том, как это работает? Я не уверен, что я ошибаюсь в своем запросе или что-то смущает?

+0

Каков ваш часовой пояс вашего сервера MySQL, определенный как? (http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html) –

+0

Это может помочь http://dba.stackexchange.com/questions/20217/mysql-set-utc -time-as-default-timestamp – RiggsFolly

ответ

0

IST +5.30 часов до UTC, поэтому, сохраняя время IST данных в UTC, вам может потребоваться использовать функцию convert_tz. Или лучше настроить сервер mysql на часовой пояс UTC.

Для ручного преобразования работает как

mysql> select convert_tz('2015-03-23 18:42:43','+00:00','-05:30') as utc; 
+---------------------+ 
| utc     | 
+---------------------+ 
| 2015-03-23 13:12:43 | 
+---------------------+ 
1 row in set (0.00 sec) 

SO вставка будет как

insert into table_name 
(date) 
values 
(convert_tz(now(),'+00:00','-05:30')) 
+0

отличный @Abhik, ваше решение предназначено для IST (Индия), но что для других часовых поясов? как сделать его динамичным, поэтому время автоматически настраивается с часовым поясом клиента. – user2398514

+0

@ user2398514 Это довольно большая работа. Вам необходимо сохранить часовой пояс каждого пользователя в таблице «пользовательские» базы данных. Во время входа в систему вам нужно получить свой часовой пояс и использовать это в запросе. Вы также можете использовать уровень приложения в PHP, сохраняя временные интервалы как «Азия/Калькутта» для Индии и используя функцию «DateTime», которую вы можете конвертировать взад и вперед. –

+0

Я понял с этим решением, но есть ли способ найти часовой пояс клиента вместо хранения в БД, доступ к часовому поясу из заголовков запроса и его дальнейшую обработку? – user2398514

0

Установите часовой пояс правильно, как на системе и MySQL, и вам не нужно делать каких-либо преобразований.

Однако DATETIME как принимать картину местных часов, в то время как TIMESTAMP, как запись UTC текущего момента.

То есть кто-то в другом часовом поясе, читая DATETIME, будет видеть то, что вы видели на ваших часах, но при чтении TIMESTAMP будет отображаться другое значение.

Смежные вопросы