Google App Engine, время анализа и часовые пояса - PullRequest
3 голосов
/ 06 января 2011

Я работаю над приложением Google App Engine / Django, и у меня возникла следующая проблема: в моем html есть ввод времени.Ввод свободного текста - пользователь вводит «через 1 час» или «завтра в 11 утра».Затем текст отправляется на сервер в AJAX, который анализирует его с помощью этой библиотеки Python: http://code.google.com/p/parsedatetime/. После анализа сервер возвращает временную метку времени.Вот в чем проблема - Google App Engine всегда работает в UTC.Поэтому предположим, что местное время сейчас 11:00, а время UTC - 2:00.Когда я отправляю «сейчас» на сервер, он возвращает «2 часа ночи», что хорошо, потому что я хочу, чтобы дата была получена в UTC.Когда я отправлю «через 1 час», сервер вернет «3 часа ночи», что тоже хорошо.Тем не менее, когда я отправляю «в полдень», сервер возвращает «12:00», потому что он думает, что я говорю о полдень по UTC - но на самом деле мне нужно, чтобы он возвратил 3 часа ночи, что является полднем для отправителя запроса .. Я могу передать дальшеTZ браузера, который отправляет запрос, но это мне не очень помогает - библиотека parsedatetime не будет принимать аргумент часового пояса (поправьте меня, если я ошибаюсь).Есть ли прогулка вокруг этого?Может быть, установка окружения TZ как-то?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 13 января 2011

Что вы можете сделать, это добавить разницу, используя объект timedelta (http://docs.python.org/library/datetime.html)

Смещение

Вот некоторый (очень грубый) код, чтобы дать вам идею:

import parsedatetime
import datetime

my_users_timezone = whatever #replace this with a string that will make sense in the offsets dictionary

utc_timezone_offsets_in_hours = {
   'utc' : 0,
   'pacific' : -8,
   # etc
}

parsed_time = parsedatetime.whatever(input_string)
offset_hours = utc_utc_timezone_offsets_in_hours[my_users_timezone]
final_time = parsed_time + datetime.timedelta(hours=offset_hours)
return final_time
0 голосов
/ 13 января 2011
Процедура синтаксического анализа

parsedatetime ожидает timetuple() в качестве параметра sourceTime и должна переносить любую информацию о часовом поясе, которую вы включаете в него, поскольку я не помню, чтобы какой-либо код переопределял его.Если это не так, то это ошибка, и дайте мне знать.

Вы можете использовать код, подобный тому, как предложенный выше ответ на данный момент, чтобы добавить смещение TZ после того, как подпрограмма parse() возвращает то, что она определила с датойбыть:

import parsedatetime as pdt

cal = pdt.Calendar()

start  = datetime.datetime.now().timetuple()

parsed, flag = cal.parse('in 1 hr', start)

тогда вы можете принять timetuple значение parsed и использовать timedelta, чтобы добавить ваши смещения часов

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