Преобразование даты и времени UTC в локальную дату и время пользователя - PullRequest
5 голосов
/ 07 ноября 2010

Я использую python в Django и Google App Engine. Я также использую DateTimeProperty в одной из моих моделей. Иногда я хотел бы показать эту дату и время пользователю.

Как лучше всего преобразовать дату и время, хранящиеся в DateTimeProperty, в дату и время пользователя?

Или более точный способ сформулировать вопрос: каков наилучший способ получить часовой пояс клиента и преобразовать объект даты и времени python в их собственное местное время?

Ответы [ 3 ]

8 голосов
/ 07 ноября 2010

Это больше вопрос Python, чем вопрос GAE, если только у GAE нет какой-либо инфраструктуры, способствующей этому (я сделал быстрое сканирование, но не нашел ссылки).

По сути, вы хотитехранить дату / время в часовом поясе UTC (например, использовать datetime.datetime.utcnow) вместе с часовыми поясами пользователя, которые вы можете попытаться извлечь из пользовательских IP-адресов (используя GeoDjango, если это доступно в GAE, или pygeoip; вам нужна некоторая база геолокации, например: http://www.maxmind.com/app/geolitecity), или явным образом спросить пользователей об этом - у вас есть то преимущество, что вы можете запросить описательное название часового пояса, например «Европа / Варшава». Если вы запрашиваете только UTC + 2, то вы теряете любые указанияDST смещается.

Затем вы можете перейти от utc к желаемому часовому поясу, используя, например, pytz :

import pytz
local_tz = pytz.timezone(timezone_name)
return timestamp_utc.replace(tzinfo=pytz.utc).astimezone(local_tz).replace(tzinfo=None)

- где timestamp_utc - это время и дата utc, чтовы хотите конвертировать, а timezone_name - это упомянутое «Европа / Варшава».

(Обратите внимание, что я не знаю, какие из этих работ работают в GAE, но, по крайней мере, вы будете знать, что искать)

3 голосов
/ 07 ноября 2010

Так что я немного больше изучил это. Чтобы правильно делать часовые пояса, вы должны следовать чему-то вроде того, что Томаш описал в своем ответе. Однако, если вы готовы терпеть немного клуджа, вы можете пройти 90% пути с гораздо меньшими усилиями.

Когда пользователь входит в систему или выполняет какие-либо действия на вашем сайте, вы можете использовать javascript, чтобы получить текущее смещение часового пояса, и затем отправить его в следующем запросе:

var offset = (new Date()).getTimezoneOffset()
$.post("post.html", "offset="offset.toString(), ... );

Конечно, это предполагает, что пользователь правильно установил свой текущий часовой пояс. Это обсуждается на ряде других сайтов:

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

Лучший и простой способ преобразования даты и времени Google App Engine в шаблоны:

http://code.google.com/p/dateconv4gae/

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