这是我正在尝试做的事情:用户提交太平洋时间,一旦提交,我使用 .replace 将时区设置为太平洋。
Pacific = time.USTimeZone(-8, "Pacific", "PST", "PDT")
addEvent.date = addEvent.date.replace(tzinfo=Pacific)
一旦我设置了 tzinfo,我正在做一个 put。根据 google appengine 的 python 文档,它说:
“如果 datetime 值具有 tzinfo 属性,它将被转换为 UTC 时区进行存储。值从数据存储返回为 UTC,tzinfo 为 None。需要日期和时间值的应用程序在特定time zone 必须在更新 value 时正确设置 tzinfo,并在访问 value 时将 value 转换为 timezone。"
但是,当我执行 put() 时,出现以下错误:
警告 2012-10-06 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”,我仍然会遇到同样的错误。
真的可以在这里使用大量帮助...谢谢!