5

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

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

如何获得正确的当地时间?我需要更改我的应用程序的时区吗?

4

3 回答 3

7

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

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

查看 Google Code 上的以下项目,了解 App Engine 优化版本的 pytz。

谷歌代码 - gae-pytz

于 2013-07-28T14:56:09.980 回答
6

我已经能够得到这个工作:

import pytz
import datetime

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

print datetime.datetime.now(tz)

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

于 2013-07-28T14:47:44.377 回答
5

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

GAE 服务器的时区始终设置为 UTC。由于 UTC 是夏令时,比英国时间晚一小时,因此您会得到一小时的差异。

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

于 2013-07-28T14:54:08.553 回答