【问题标题】:Calculating time difference in Google App Engine/Java在 Google App Engine/Java 中计算时差
【发布时间】:2012-12-06 05:03:43
【问题描述】:

我正在开发谷歌应用引擎。如果客户端发送的时间与服务器上的时间之间的时间差小于 15 秒,我正在做一些需要我做的事情。当我在测试服务器(在我自己的机器上)上尝试时,该代码运行良好。但是当我将代码部署在应用程序引擎上时失败。我猜这可能是因为如果服务器上的时区不同,那么发生这种情况时可能会增加/减少几个小时。

我基本上做的是让客户发送他的时间戳以及其他数据。当服务器随后需要计算时差时,我会从客户端的时间戳中减去服务器的时间戳。

如果时区不同,那么显然我会遇到问题。

我知道避免此时区惨败的一种解决方案是让服务器为初始请求和稍后的后续处理添加时间戳,但对于我的应用程序,定时器必须从客户端发出请求时开始计时并且如果 15 秒过去了,对于客户端,那么服务器不会采取任何行动。

由于我是客户端和服务器端的开发人员,我可以向您展示我所做的工作。

客户端调用示例

new Register().sendToServer(username,location,new TimeStamp(new Date().getTime()));

这存储在数据存储中,如果满足某些条件,稍后再检索。

服务器端样本找出差异

Date date= new Timestamp(new Date().getTime());
Date d1 = (Date) timeStampList[i];
long timedif = Math.abs(d1.getTime() - date.getTime());
if(timedif <= 15000)
    do something;
else
    do something else;

所以基本上,我的问题是如何标准化时区变化?

谢谢

【问题讨论】:

  • 这与时区无关:getTime 返回自格林威治标准时间 1/1/1970 午夜以来的毫秒数。当您打印出 timedif 时,您会得到什么?是30秒还是三个小时?可能只是您的时钟和服务器关闭了 15 秒以上。

标签: java google-app-engine localization timezone timezone-offset


【解决方案1】:

Simpy 使用绝对的unix time:System.currentTimeMillis()

此时间是绝对时间,即自 1970 年 1 月 1 日 UTC 午夜以来的毫秒数),因此您可以简单地计算差异。

【讨论】:

    【解决方案2】:

    正如@Diego Basch 指出的那样,如果时差在 30 分钟到整小时之间,您应该处理时区差异,因为您的客户端与服务器不在同一个时区。

    您可以使用 new Date().getTimezoneOffset() 在 JavaScript 中确定客户端时区。注意:以分钟为单位返回与 UTC 的偏移量。

    在服务器上,您应该能够使用Calendar.getInstance().getTimeZone() 确定时区。

    【讨论】:

      猜你喜欢
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      • 2011-12-09
      • 2011-08-22
      • 2011-04-20
      • 1970-01-01
      相关资源
      最近更新 更多