Мне нужно сделать преобразования даты и времени в MySQL. Как определить часовой пояс клиента? - PullRequest
0 голосов
/ 12 июля 2011

Я попытаюсь объяснить мою цель, чего я пытаюсь достичь и почему у меня ничего не получается Мне нужно хранить DATETIME в таблице MYSQL. Клиент должен иметь возможность получить этот DATETIME двумя способами:

  1. если дата1 2011-07-12 00:00:00 была добавлена ​​пользователем 1 с часовым поясом UTC + 2, а затем пользователь 2 с часовым поясом UTC-3 получает это значение, он должен получить datetime 2011-07-11 19 : 00: 00. DST здесь важен.
  2. , если user1 добавил дату / время 2011-07-12 00:00:00, user2 получает точно такую ​​же дату

вот и все, мне больше ничего не нужно. но я не могу найти способ, как это сделать ...

Я придумал, чтобы хранить дату в часовом поясе user1, что позволяет вообще не выполнять никаких преобразований при использовании 2-го метода. проблема с 1-м методом. Я думаю, я мог бы использовать функцию CONVERT_TZ (), но что я должен использовать в качестве параметра часового пояса? этот список часовых поясов в таблице mysql.time_zone_name, по моему мнению, является полным беспорядком. практично ли позволить пользователю выбирать свой часовой пояс из этого грязного списка? Например, что я должен использовать: Европа / Варшава или Польша? Если я живу в городе Клайпеда (Европа, Литва), то очевидно ли, что я должен выбрать часовой пояс Европа / Вильнюс? Почему эти имена такие сложные? Может быть, есть другие таблицы MySQL, которые используют как-то стандартизированные имена, такие как UTC + 02: 00 шириной DST и без, как в ОС wondows (грустно, у меня нет шансов сравнить с другими ОС)? Я мог бы использовать смещение часового пояса "+02: 00", как задокументировано, но тогда информация о летнем времени не сохраняется. а может есть способы автоматического определения часового пояса пользователя?

Надеюсь, я ясно дал понять. Помощь и любой совет очень ценится.

[ отредактировано (ответ на Flimzy )]

Если мне всегда нужно конвертировать в дату для пользователей (клиентов), я согласен, что лучше всего использовать UTC. Но что, если один пользователь вводит DATETIME 2011.11.12 00:00:00, а другой пользователь должен видеть точно такое же время, а его часовые пояса не совпадают, что тогда? Поэтому я решил вообще не преобразовывать дату при сохранении и сохранении часового пояса вместе. Это моя проблема. Как определить часовой пояс клиента автоматически? Или как сделать названия часовых поясов не такими запутанными? Этот параметр очень важен для моего приложения, и поэтому я не хочу позволять пользователю настраивать его, но если нет способа сделать это, я хочу, чтобы этот список часовых поясов был максимально четким.

Ответы [ 3 ]

1 голос
/ 12 июля 2011

Всякий раз, когда вы работаете с несколькими часовыми поясами, вы должны всегда конвертировать ваше время в UTC перед вставкой, а затем преобразовать в часовой пояс пользователя для отображения при извлечении из базы данных.

Дажеесли никто из ваших пользователей не использует UTC, хранение в UTC значительно упрощает процесс.

Причины запутанных имен, а не просто «UTC + 02: 00 с DST», заключается в том, что DST определяется по-разному в разных регионах.в течение того же времени.Используя пример из моей части мира, США и Мексика находятся в одинаковых часовых поясах («Центральный США»), но имеют разные даты перехода на летнее время.США меняются примерно за 2 недели до Мексики.поэтому недостаточно сказать «я нахожусь в GMT-05 с DST», потому что это не означает , какие правила DST применимы ко мне.

Есть много мест, где правила DSTдаже сложнее, чем этот пример.И это усложнение еще раз показывает, что хранение всего в UTC значительно упрощает жизнь:)

0 голосов
/ 13 июля 2011

Я думаю, что я буду использовать этот javascript , а затем в соответствии с Список обнаружения часовых поясов создать свой собственный список с именами пользовательских часовых поясов, таких как (UTC +02: 00) Хельсинки, Киев,Рига, София, Таллинн, Вильнюс и т. Д. И оставьте пользователю возможность менять часовой пояс, если в процессе автоопределения что-то пошло не так

0 голосов
/ 12 июля 2011

Попробуйте использовать TimeStamp

Отметки времени также автоматически сохраняют информацию о часовом поясе (фактически она встроена).

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