以下是我正在尝试做的事情:用户在太平洋提交时间,一旦提交,我使用.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。需要日期和时间值的应用程序在特定时区中,必须在更新值时正确设置tzinfo,并在访问值时将值转换为时区。“
然而,当我执行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”,我仍然会得到相同的错误。
真的可以在这里使用大量帮助...... 谢谢!
答案 0 :(得分:15)
解决方案是从转换为UTC后的时间完全删除tzinfo
。
timestamp = timestamp.replace(tzinfo=None)
答案 1 :(得分:0)
这是我的工作示例:
if my_date.utcoffset():
my_date = (my_date - my_date.utcoffset()).replace(tzinfo=None)
答案 2 :(得分:0)
我使用http://hnrss.org/遇到了这个问题。这是我的解决方案。
import datetime
from dateutil import parser
your_date_string = 'Mon, 24 Oct 2016 16:49:47 +0000'
your_date = parser.parse('your_date_string')
# your_date is now a datetime.datetime object
your_date_minus_tz = your_date.replace(tzinfo=None)
现在尝试使用put(),您应该在Cloud数据存储区中看到2016-10-24 16:49:47。