Вот что я пытаюсь сделать: пользователь отправляет время в тихоокеанском регионе, после отправки я использую .replace, чтобы установить часовой пояс на тихоокеанский.
Pacific = time.USTimeZone(-8, "Pacific", "PST", "PDT")
addEvent.date = addEvent.date.replace(tzinfo=Pacific)
Как только я установил tzinfo, я делаю пут. В соответствии с документацией по python для google appengine говорится:
«Если значение даты и времени имеет атрибут tzinfo, оно будет преобразовано в часовой пояс UTC для хранения. Значения возвращаются из хранилища данных в формате UTC с tzinfo, равным None. Приложение, которому требуется, чтобы значения даты и времени находились в определенном часовой пояс должен правильно установить tzinfo при обновлении значения и преобразовать значения в часовой пояс при доступе к значению».
Однако, когда я делаю put(), я получаю следующую ошибку:
ПРЕДУПРЕЖДЕНИЕ 06.10.2012, 21:10:14,579 tasklets.py:399] исходный генератор _put_tasklet(context.py:264) поднял NotImplementedError(Дата DatetimeProperty может поддерживать только UTC. Создайте новое свойство для поддержки альтернативных часовых поясов.) ПРЕДУПРЕЖДЕНИЕ 2012 -10-06 21:10:14,579 tasklets.py:399] приостановленный генератор put(context.py:703) поднял NotImplementedError(Дата DatetimeProperty может поддерживать только UTC. Создайте новое свойство для поддержки альтернативных часовых поясов.)
Обратите внимание, что я использую NDB
Итак, после этого я предположил, что, возможно, NDB не преобразует его автоматически в UTC. Итак, я попытался преобразовать его в UTC, используя следующий код:
class UTC(tzinfo):
def utcoffset(self, dt):
return timedelta(0)
def tzname(self, dt):
return str("UTC")
def dst(self, dt):
return timedelta(0)
и теперь я все еще получаю ту же ошибку даже после того, как я конвертирую тихоокеанское время в UTC и устанавливаю имя tzinfo как «UTC».
Здесь действительно может понадобиться тонна помощи ... спасибо!