计算Google App Engine / Java中的时差

时间:2012-12-06 05:03:44

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

我正在使用谷歌应用引擎。如果客户端发送的时间与服务器上的时间之间的时差小于15秒,我正在开展一些需要我做某事的事情。当我在测试服务器上(在我自己的机器上)尝试它时,代码工作正常。但是当代码部署在app-engine上时失败了。我猜这可能是因为如果服务器上的时区不同,那么在发生这种情况时可能会有几个小时的增加/减少。

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

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

我知道避免这种时区惨败的一个解决方案是让服务器为初始请求和后续处理提供时间戳,但对于我的应用程序,定时器从客户端发出请求时开始计时是至关重要的并且如果已经过了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;

基本上,我的问题是如何规范时区变化?

感谢

2 个答案:

答案 0 :(得分:1)

Simpy使用绝对unix timeSystem.currentTimeMillis()

这个时间是绝对的,即自1970年1月1日,UTC午夜以来的毫秒数,所以你可以简单地计算差异。

答案 1 :(得分:0)

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

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

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