1

我正在研究谷歌应用引擎。如果客户端发送的时间与服务器上的时间之间的时间差小于 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;

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

谢谢

4

2 回答 2

1

Simpy 使用绝对的unix 时间System.currentTimeMillis()

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

于 2012-12-06T14:44:27.003 回答
0

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

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

在服务器上,您应该能够使用Calendar.getInstance().getTimeZone().

于 2012-12-06T17:42:02.277 回答