Работа с часовыми поясами - PullRequest
       1

Работа с часовыми поясами

0 голосов
/ 30 декабря 2010

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

Сценарий: пользователь 1 из Индии, поэтому его часовой пояс будет GMT +05:30 Пользователь 2 из Великобритании, поэтому его часовой пояс будет GMT + 01: 00

. Если Пользователь 1 отправляет сообщение Пользователю 2, я хочу показать Время Отправленных / Полученных сообщений согласночасовой пояс пользователя.Например, пользователь 1 отправляет сообщение в 6:30 по индийскому времени, когда пользователь 2 будет просматривать сообщение, которое будет отображаться как 2:00 по британскому времени.

Вот мой вопрос: всякий раз, когда я сохраняю сообщение, я должен преобразоватьэто время по Гринвичу + 00, поэтому все мои метки базового времени совпадают, а затем, когда я отображаю сообщение, я преобразую его обратно в определенный часовой пояс пользователя.Это будет сложно?Это лучший способ сделать это?

Мне нравится получать представления как для сохранения, так и для отображения, а также когда мне нужно выполнить преобразование времени с точки зрения оптимизации.Мне нужно разобраться с любыми / всеми часовыми поясами.

Я разрабатываю это приложение на PHP и MySQL, и я знаю, что метод преобразования часовых поясов поставляется с PHP и MySQL.

Я простопытаясь выяснить лучший способ сделать это.С нетерпением ждем всех ценных предложений.

Примечание. На данный момент меня не очень беспокоит экономия на день / свет.

Спасибо, Рави

Ответы [ 4 ]

0 голосов
/ 29 сентября 2012

В любом случае, если вы имеете дело с пользователями, которые находятся в разных часовых поясах, вы должны отделить часовой пояс от даты.Я давно слышал, что WordPress сделал это так же:

  • Первый шаг, определить часовой пояс даты
  • Второй шаг, установить часовой пояс даты в GMT (+0)
  • Третий шаг, сохранить часовой пояс и дату GMT в двух отдельных столбцах.

В любом случае, если вам нужна дополнительная информация, здесь есть сообщение здесь

0 голосов
/ 30 декабря 2010

Вот мой вопрос: всякий раз, когда я сохраняю сообщение, я должен преобразовать его в GMT + 00, чтобы все мои метки базового времени были одинаковыми, а затем, когда я отображаю сообщение, я конвертирую его обратно в определенный часовой пояс пользователя. Это будет сложно? Это лучший способ сделать это?

Это так. Единственное предостережение - позволить каждому пользователю указывать желаемый часовой пояс для просмотра времени (либо в качестве предпочтения, либо в настройках своей клиентской системы, либо из базы данных пользователей).

Мне нравится получать представления как для сохранения, так и для отображения, а также в тех случаях, когда мне нужно выполнить преобразование времени с точки зрения оптимизации. Мне нужно разобраться с любыми / всеми часовыми поясами.

Лучшее время для преобразования из клиента в GMT - это ваша "бизнес" логика - в основном, какая бы у вас ни была логика, которая обрабатывает данные веб-формы. НЕ на стороне базы данных.

Лучшее время для преобразования из GMT в клиент для просмотра - прямо перед / на уровне представления, например, когда вы печатаете свой HTML.

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

ПРИМЕЧАНИЕ Эта логика, связанная с часовым поясом, становится ОЧЕНЬ ОЧЕНЬ сложной, если / когда вам нужно выполнить какую-либо логику для конкретной даты (например, агрегировать на основе даты, а не просто печатать метку времени для пользователя).

0 голосов
/ 30 декабря 2010

При сохранении данных в вашей базе данных используйте что-то вроде:

INSERT INTO TableName SET TheDateFile=UTC_TIMESTAMP()

И затем, предполагая, что вы разрешаете каждому пользователю указывать свой часовой пояс, вам нужно будет преобразовать дату в вашей бизнес-логике (как указано в DVK)

Что-то вроде:

DATE_FORMAT(DATE_ADD(TheDateField, INTERVAL 2 HOUR)  // or whatever value

Я сам этого не делал, но, полагаю, было бы достаточно просто сохранить часовой интервал в соответствии с часовым поясом пользователя.

0 голосов
/ 30 декабря 2010

При хранении сообщений конвертируйте, используйте и сохраняйте их в нейтральном часовом поясе DST - например, UTC или GMT.

С их помощью сохраните исходное смещение часового пояса и смещение DST - это поможет с бизнес-логикой.

При отображении сообщения используйте эти данные и конвертируйте их в местное время.

См. этот вопрос и ответы о передовых методах работы с различными часовыми поясами.

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