在我的Google App Engine应用程序中,我在我的模型中存储了一个自动更新的日期/时间:
class MyModel(db.Model):
date = db.DateTimeProperty(auto_now_add=True)
但是,该日期/时间是服务器上的本地时间,根据它的时区。
那么,当我想在我的网页上显示它时,我该如何根据客户端时区对其进行格式化?
另外,我怎么知道谷歌服务器在哪个时区?
答案 0 :(得分:5)
关于问题的第二部分:
Python time()返回UTC,无论服务器在哪个时区.timezone()和tzname()将分别为您提供服务器上本地时间的偏移量以及时区名称和DST时区作为一个元组。截至发布时,GAE使用Python 2.5.x;请参阅Python时间函数here的文档。
问题的第一部分:
您可以使用服务器上的代码或客户端上的代码格式化日期。
如果您在服务器上格式化,则可以
如果您在客户端上格式化,则需要编写几行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/。