4

我是ndb数据存储的用户 GAE,并date定义了如下属性

class GuestMessage(ndb.Model):
    date = ndb.DateTimeProperty(auto_now_add=True)

所以现在我可以很容易地打印它e.date.strftime('%Y-%m-%d %H:%M:%S')并得到2013-06-03 05:46:50

但是我怎样才能像2013-06-03 05:46:50 +00002013-06-03 13:46:50 +0800根据用户的时区设置打印它呢?

4

1 回答 1

4

datetime 对象没有 tzinfo 对象。所以请试试这个

import pytz
from pytz import timezone

query = GuestMessage.all().get()
current = query.date
user_tz = timezone('Asia/Singapore')
current = current.replace(tzinfo=pytz.utc).astimezone(user_tz)
self.response.write(current.strftime('%Y-%m-%d %H:%M:%S %z')) # 2013-05-22 19:54:14 +0800
self.response.write(current.strftime('%Y-%m-%d %H:%M:%S %Z')) # 2013-05-22 19:54:14 SGT

从请求标头中查找时区:

county_code = self.request.headers['X-Appengine-Country'] # Return County code like SG, IN etc.
tz = pytz.country_timezones(county_code)

如果您正在获取ImportError: No module named pytz,请从此处下载源代码:pypi.python.org/pypi/gaepytz。然后将 pytz 目录移动到应用引擎项目的根目录

于 2013-06-03T07:57:37.627 回答