在GAE上,我如何根据正确的客户端TimeZone显示日期?

时间:2009-05-15 13:34:24

标签: python django google-app-engine timezone

在我的Google App Engine应用程序中,我在我的模型中存储了一个自动更新的日期/时间:

class MyModel(db.Model):
   date = db.DateTimeProperty(auto_now_add=True)

但是,该日期/时间是服务器上的本地时间,根据它的时区。

那么,当我想在我的网页上显示它时,我该如何根据客户端时区对其进行格式化?

另外,我怎么知道谷歌服务器在哪个时区?

3 个答案:

答案 0 :(得分:5)

关于问题的第二部分:

Python time()返回UTC,无论服务器在哪个时区.timezone()和tzname()将分别为您提供服务器上本地时间的偏移量以及时区名称和DST时区作为一个元组。截至发布时,GAE使用Python 2.5.x;请参阅Python时间函数here的文档。

问题的第一部分:

您可以使用服务器上的代码或客户端上的代码格式化日期。

  • 如果您在服务器上格式化,则可以

    • 使用请求者IP地址的时区
    • 要求用户注册并为您提供时区,存储并使用存储的值
    • 在GET或POST上使用(隐藏?)字段,以便客户端所需的时区是请求的一部分
  • 如果您在客户端上格式化,则需要编写几行JavaScript。该过程类似于“使用Date(utctime)从UTC生成日期,然后将其填入文档。”默认情况下,JavaScript日期显示为本地时间,无论它们如何初始化 - 太棒了!

我建议在客户端上进行格式化,因为什么是没有一点JavaScript的网页?这是2009年! Marcelo有一些例子。

答案 1 :(得分:2)

好的,感谢Thomas L Holaday,我必须将UTC日期发送给客户,例如使用JSON:

json = '{"serverUTCDate":new Date("%s")}' % date.ctime()

然后,在客户端,根据用户时区添加/删除秒数:

var localDate = serverUTCDate.getTime() - (new Date()).getTimezoneOffset()*60000;

答案 2 :(得分:1)

您可以通过询问本地和UTC时间以及查看差异来查找服务器的时区。要查找客户端时区,您需要在模板中添加一些Javascript来告诉您,例如在AJAX交流中。一旦你发现了三角洲,我就建议使用pytz,pytz.sourceforge.net/。