如何在Google App Engine中获取当前英国时间

Awa*_*ias 5 python time google-app-engine datetime

在我的机器上的python下,我可以运行datetime.now()以获取当地时间.如果我检查time.daylight标志它被设置为1因为我们目前在7月(因此夏令时).

但是,如果我datetime.now()在Google App Engine(包括开发服务器)上运行,它不会考虑夏令时(英国夏令时)并返回错误的时间(13:47而不是14:47).如果我time.daylight在GAE中进行检查,则设置为0.

我怎样才能得到正确的当地时间?我是否需要更改应用的时区?

Tom*_*ron 7

Google App Engine 的“时区”始终设置为 UTC。

您可以使用 pytz 之类的库调整到您当地或所需的时区。

在 Google Code 上查看以下项目,以获取 pytz 的 App Engine 优化版本。

谷歌代码 - gae-pytz


nyu*_*a7h 6

我已经能够做到这一点:

import pytz
import datetime

tz = pytz.timezone('Europe/London')

print datetime.datetime.now(tz)
Run Code Online (Sandbox Code Playgroud)

默认情况下,Google App Engine 似乎已经导入了一些模块,包括pytzand datetime,因此也许不需要显式导入它们。


Pet*_*ego 5

AppEngine是一个分布式系统,其服务器可以位于全球不同的数据中心(afaik,目前是欧盟和美国).请注意,您运行的python代码在服务器上运行而不是在浏览器中运行,因此您永远不会得到客户端的时间.为了获得客户的时间,您需要使用JavaScript然后将其发送到服务器.

GAE服务器的时区始终设置为UTC.由于UTC是在距离英国时间一小时的夏季时间,因此您将获得一小时的差异.

有关GAE的时间处理,请参阅此博客系列:http://www.learningtechnicalstuff.com/2010/01/supporting-timezones-in-google-app.html