Как мне узнать текущий часовой пояс MySQL? - PullRequest
176 голосов
/ 29 мая 2010

Кто-нибудь знает, есть ли такая функция в MySQL?

UPDATE

Это не выводит никакой действительной информации:

mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM             | SYSTEM              |
+--------------------+---------------------+

Или, может быть, сам MySQL не может точно знать используемый time_zone, это нормально, мы можем задействовать PHP здесь, пока я могу получить действительную информацию, не такую ​​как SYSTEM ...

Ответы [ 16 ]

0 голосов
/ 30 января 2018

Попробуйте использовать следующий код:

//ASP CLASSIC
Set dbdate = Server.CreateObject("ADODB.Recordset")
dbdate.ActiveConnection = MM_connection
dbdate.Source = "SELECT NOW() AS currentserverdate "
dbdate.Open()
currentdate = dbdate.Fields("currentserverdate").Value
response.Write("Server Time is "&currentdate)
dbdate.Close()
Set dbdate = Nothing
0 голосов
/ 04 ноября 2017

Чтобы узнать текущее время в соответствии с вашим часовым поясом, вы можете использовать следующее (в моем случае это «+5: 30»)

выберите DATE_FORMAT (convert_tz (now (), @@ session.time_zone, '+ 05:30'), '% Y-% m-% d')

0 голосов
/ 24 июня 2017

Используйте LPAD (TIME_FORMAT (TIMEDIFF (NOW (), UTC_TIMESTAMP), '% H:% i'), 6, '+'), чтобы получить значение в формате часового пояса MySQL, которое вы можете удобно использовать с CONVERT_TZ (). Обратите внимание, что смещение часового пояса, которое вы получаете, действительно только в момент времени, когда вычисляется выражение, так как смещение может изменяться со временем, если у вас есть летнее время. Тем не менее, выражение полезно вместе с NOW () для хранения смещения с местным временем, которое однозначно определяет, что дает NOW (). (В часовых поясах DST NOW () возвращается на один час назад в год, поэтому имеет несколько повторяющихся значений для разных моментов времени).

0 голосов
/ 24 ноября 2015

Это может быть так же глупо, как этот

выберите timediff (current_time (), utc_time ())

как и вся mysql

вы не получите значение часового пояса напрямую, но если бы не было другого пути ...

@@ global.time_zone нельзя использовать в поле зрения, так как это переменная - и она возвращает совершенно непригодное значение «SYSTEM» (я не понимаю, почему кто-то возился с этим)

если вам нужно использовать ваш запрос в сеансе с измененным time_zone (по сеансу SET TIME_ZONE =), вы получите , что с @@ session.time_zone если вы запросите @@ global.time_zone, вы получите 'SYSTEM' поймать 22 * ​​1013 *

если вы попробуете datediff, date_sub или timediff с now () и utc_time (), вы, вероятно, столкнетесь с проблемами конвертации, которые будут молча выбиты сервером

Худшая документация, которую я когда-либо видел, тоже мне не поможет.

Отличная работа, все!

Но что-то, предложенное выше, вероятно, будет работать, по крайней мере, с некоторыми версиями сервера, как мое решение (5.5.43-37).

0 голосов
/ 27 июля 2015

Вставьте фиктивную запись в одну из ваших баз данных с временной меткой Выберите эту запись и получите значение метки времени. Удалить эту запись. Получает точно часовой пояс, который сервер использует для записи данных, и игнорирует часовые пояса PHP.

0 голосов
/ 01 апреля 2014

Вам просто нужно перезапустить mysqld после изменения часового пояса системы.

Глобальный часовой пояс MySQL занимает часовой пояс Системы. Когда вы изменяете любой такой атрибут системы, вам просто нужно перезапустить Mysqld.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...