如何根据用户的时区设置打印日期时间

时间:2013-06-03 06:03:26

标签: python google-app-engine datetime timezone

我是数据存储区的用户GAE ndb,并且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

1 个答案:

答案 0 :(得分: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目录移动到app引擎项目的根目录