На GAE, как я могу показать дату в соответствии с правым клиентом TimeZone? - PullRequest
5 голосов
/ 15 мая 2009

В моем приложении Google App Engine я сохраняю автоматически обновляемую дату / время в моей модели следующим образом:

class MyModel(db.Model):
   date = db.DateTimeProperty(auto_now_add=True)

Но эта дата / время является местным временем на сервере в соответствии с его часовым поясом.

Итак, когда я хочу отобразить его на своей веб-странице, как я могу отформатировать его в соответствии с клиентом часовым поясом?

Кроме того, как я могу узнать, в каком часовом поясе находится этот сервер Google?

Ответы [ 3 ]

5 голосов
/ 15 мая 2009

По второй части вашего вопроса:

Python time () возвращает UTC независимо от того, в каком часовом поясе находится сервер. Timezone () и tzname () соответственно сообщат вам смещение по местному времени на сервере, а также имя часового пояса и часовой пояс DST. как кортеж GAE использует Python 2.5.x на момент публикации; см. документацию по функциям времени Python здесь .

Для первой части вопроса:

Вы можете отформатировать дату с помощью кода на сервере или с помощью кода на клиенте.

  • Если вы форматируете на сервере, вы можете

    • Использовать часовой пояс IP-адреса запрашивающей стороны
    • Требуется, чтобы пользователь зарегистрировался и дал вам часовой пояс, сохраните его и используйте сохраненное значение
    • Используйте (скрытое?) Поле в GET или POST, чтобы желаемый часовой пояс клиента был частью запроса
  • Если вы форматируете на клиенте, вам нужно написать несколько строк JavaScript. Процедура выглядит примерно так: «создайте дату из UTC, используя Date (utctime), а затем вставьте ее в документ». По умолчанию даты JavaScript отображаются как местное время независимо от того, как они были инициализированы - потрясающе!

Я рекомендую форматировать на клиенте, потому что как выглядит веб-страница без JavaScript? Это 2009! Марсело имеет несколько примеров.

2 голосов
/ 15 мая 2009

Хорошо, благодаря Томасу Л. Холадей, я должен отправить эту дату UTC клиенту, например, используя JSON:

json = '{"serverUTCDate":new Date("%s")}' % date.ctime()

А затем на стороне клиента добавьте / удалите количество секунд в соответствии с часовым поясом пользователя следующим образом:

var localDate = serverUTCDate.getTime() - (new Date()).getTimezoneOffset()*60000;
1 голос
/ 15 мая 2009

Вы можете узнать часовой пояс сервера, запросив местное время и время UTC и выяснив разницу. Чтобы узнать часовой пояс клиента, вам нужно иметь в своем шаблоне немного Javascript, который скажет вам, например, в обмене AJAX. Чтобы манипулировать часовыми поясами, как только вы обнаружили дельты, я предлагаю pytz, pytz.sourceforge.net/.

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