在我的机器上的python下,我可以运行datetime.now()
来获取当地时间。如果我检查time.daylight
标记,则将其设置为1
,因为我们目前处于7月(因此夏令时)。
但是,如果我在Google App Engine上运行datetime.now()
(包括开发服务器),则不会考虑夏令时(英国夏令时)并返回错误的时间(13:47而不是14:47) 。如果我在GAE中检查time.daylight
,则会将其设置为0
。
如何获得正确的当地时间?我是否需要更改应用的时区?
答案 0 :(得分:5)
AppEngine是一个分布式系统,其服务器可以位于全球不同的数据中心(afaik,目前是欧盟和美国)。请注意,您运行的python代码在服务器上运行而不是在浏览器中运行,因此您永远不会得到客户端的时间。为了获得客户的时间,您需要使用JavaScript然后将其发送到服务器。
GAE服务器的时区为always set to UTC。由于UTC是在距离英国时间一小时的夏季时间,因此您将获得一小时的差异。
有关GAE的时间处理,请参阅此博客系列:http://www.learningtechnicalstuff.com/2010/01/supporting-timezones-in-google-app.html
答案 1 :(得分:4)
Google App Engine的“时区”始终设置为UTC。
您可以使用像pytz这样的库来调整您当地或所需的时区。
在Google Code上查看以下关于App Engine优化版pytz的项目。
答案 2 :(得分:3)
我能够做到这一点:
import pytz
import datetime
tz = pytz.timezone('Europe/London')
print datetime.datetime.now(tz)
默认情况下,Google App Engine已经导入了一些模块,包括pytz
和datetime
,因此可能无需显式导入它们。