在客户端和服务器之间同步时间的最佳做法是什么?
我有这个查询数据存储的功能:
@classmethod
def read( cls, language=None, user=None, filters=None, **q_options ):
assert not isinstance( cls, BaseModel )
assert issubclass( cls, BaseModel )
query = cls.query( cls.language == language )
if filters:
for name, value in cls.attributes( filters, [] ).iteritems():
if name == 'updated':
query = query.filter( getattr(cls, name) >= value )
else:
query = query.filter( getattr( cls, name ) == value )
# logging.info( query )
# Query(kind='Page', filters=AND(
# FilterNode('language', '=', 'en'),
# FilterNode('updated', '>=', datetime.datetime(2014, 5, 7, 9, 12, 51, 142000))))
return query.fetch()
data = query.fetch( **q_options )
return cls.sort( data )
使用ajax调用执行时:
{method: 'GET', url: '/something.json?updated=' + (new Date().getTime() / 1000)}
它应该返回在通话中提供的时间之后更新的项目。 (我用它来将浏览器的localStorage与真实数据同步)。好吧,它不起作用,但我发现它是因为服务器和客户端之间的时差。
我在UTC / GMT +2小时,CEST(中欧夏令时)时区(这是javascript发送的)和GAE dev_appserver在GMT工作。补偿:
updated=((new Date().getTime() - 1000*60*60*2) / 1000)
解决了这个问题,但硬编码并不是解决不同时区的问题。所以,几乎没有问题:
1)真正的GAE服务器的时区是什么?它与dev_appserver' s相同吗?
2)我应该处理客户端或服务器上下文(javascript或python)的差异吗?
3)还有什么我应该知道的吗? (:由于
答案 0 :(得分:1)
这篇文章描述了一个解决方案:How to get current UK time in Google App Engine
Google App Engine始终采用UTC格式,因此您需要像pytz这样的库来调整您的偏好设置。