代码之家  ›  专栏  ›  技术社区  ›  paulgreg

在GAE上,如何根据正确的客户时区显示日期?

  •  5
  • paulgreg  · 技术社区  · 15 年前

    在我的Google App Engine应用程序中,我将自动更新的日期/时间存储在我的模型中,如下所示:

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

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

    因此,当我想在我的网页上显示它时,我可以如何根据 客户 时区?

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

    3 回复  |  直到 15 年前
        1
  •  5
  •   Thomas L Holaday    15 年前

    关于你问题的第二部分:

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

    关于问题的第一部分:

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

    我建议在客户端设置格式,因为没有JavaScript的网页是什么样子的?现在是2009年! Marcelo 有一些例子。

        2
  •  2
  •   paulgreg    15 年前

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

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

    var localDate = serverUTCDate.getTime() - (new Date()).getTimezoneOffset()*60000;
    
        3
  •  1
  •   Alex Martelli    15 年前

    您可以通过询问本地时间和UTC时间来找出服务器的时区,并查看两者之间的差异。要找出客户机时区,您需要在模板中包含一点Javascript,它会告诉您,例如在AJAX交换中。要在发现delta后操纵时区,我建议pytz,pytz.sourceforge.net/。