【问题标题】:On GAE, how may I show a date according to right client TimeZone?在 GAE 上,如何根据正确的客户时区显示日期?
【发布时间】:2010-10-26 12:06:59
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 如果加利福尼亚的咖啡商将他或她的机器设置为伦敦时间,您是要显示为加利福尼亚,显示为伦敦,还是让用户决定?
  • 这是一个好问题...在我的例子中,我将使用 build-status.appspot.com 根据浏览器显示本地时间。

标签: python django google-app-engine timezone


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    关于你问题的第二部分:

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

    对于问题的第一部分:

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

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

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

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

    【讨论】:

      【解决方案3】:

      您可以通过询问本地时间和 UTC 时间来找出服务器的时区,并查看其中的区别。要找出客户端时区,您需要在模板中包含一些 Javascript,它会告诉您例如在 AJAX 交换中。要在发现增量后操纵时区,我建议使用 pytz,pytz.sourceforge.net/。

      【讨论】:

        猜你喜欢
        • 2023-04-09
        • 2018-01-14
        • 2021-01-26
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        • 1970-01-01
        • 2010-12-22
        • 1970-01-01
        相关资源
        最近更新 更多