Как управлять часовыми поясами в веб-приложении? - PullRequest
5 голосов
/ 17 ноября 2009

Я не хочу управлять различными часовыми поясами моих пользователей в моем веб-приложении, но я не знаю, с чего начать. Я должен сохранить местное время каждого пользователя в моей базе данных ?, или, может быть, выполнить преобразование в время UTC, сохранить его, а затем выполнить преобразование еще раз, чтобы показать его?, Или есть другой способ? Например, если один из моих пользователей назначает встречу по своему местному времени, я должен преобразовать ее в UTC, сохранить ее в своей базе данных, а затем, когда ему это нужно, снова преобразовать ее в свое местное время, чтобы показать ее ?? Кстати, я использую Django. Спасибо.

Ответы [ 4 ]

2 голосов
/ 17 ноября 2009
  1. Сохранение даты / времени в формате UTC (не знаю, что это за команда Python)

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

http://docs.python.org/library/time.html

http://docs.python.org/library/datetime.html

1 голос
/ 17 ноября 2009

выполнить преобразование во время UTC, сохранить его, а затем снова выполнить преобразование, чтобы показать его?

Да, даже если у вас есть только один местный часовой пояс, вы, как правило, должны хранить свои даты в виде временных меток UTC в базе данных и преобразовывать их в текст и из текста в соответствующем часовом поясе на этапах ввода и вывода веб-приложений. Если у вас есть часовой пояс для каждого пользователя, то вы легко можете переключить часовой пояс по умолчанию на настроенный.

pytz - это обычное решение для выбора и преобразования часовых поясов. (Хотя лично я взломал мою собственную менее значительную коллекцию часовых поясов.)

1 голос
/ 17 ноября 2009

Попробуйте фрагмент кода Django Поле UTC DateTime . Практически все, что вам нужно, прямо из коробки.

0 голосов
/ 17 ноября 2009

Использование одного часового пояса «время базы данных», IMO, является наилучшим вариантом, потому что: -

  • Это значительно упрощает процедуры работы с людьми в разных часовых поясах
  • Позволяет упростить преобразование в другие часовые пояса.
  • Любой, кто видит данные вне контекста представления пользователя, может предположить, что это UTC, и не должен догадываться, является ли «12:45» для одной записи «12:45» для другой
  • Стандарты хороши

Так что да. Сохраните часовой пояс пользователя в базе данных, затем сохраняйте все время в обычное время (например, UTC). Преобразуйте их, когда пользователь просматривает что-либо, включая время. Это самое простое решение, которое не просто заставляет всех пользователей притворяться, что они находятся в одном часовом поясе.

...