GAE,JavaScript日期时间同步

GAE & JavaScript datetime sync

本文关键字:时间 同步 日期 JavaScript GAE      更新时间:2023-09-26

在客户端和服务器之间同步时间的最佳实践是什么?

我有查询数据存储的函数:

@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的相同?

2)我应该处理客户端或服务器上下文(javascript或python)的差异吗?

还有什么我应该知道的吗?(:

谢谢

这篇文章描述了一个解决方案:如何在Google App Engine中获取当前英国时间

Google App Engine总是使用UTC,所以你需要一个像pytz这样的库来调整你的偏好。