1

我正在研究谷歌应用程序引擎。如果客户端发送的时间与服务器发送的时间之间的时间差小于15秒,我正在处理一些需要我做些什么的事情。当我在测试服务器上(在我自己的机器上)尝试它时,代码完美工作。但是当代码部署在应用程序引擎上时失败。我猜这可能是因为如果在服务器的时区不同,可能会有几个小时增加/减少发生时。计算Google App Engine/Java中的时差

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

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

我知道避免这个时区的一个解决方案是让服务器为最初的请求和随后的处理都加上时间戳,但是对于我的应用程序来说,定时器从客户端发出请求,并且如果已经过了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; 

所以基本上,我的问题是我怎么正常化时区的变化?

感谢

+0

这与时区无关:getTime返回自1970年1月1日午夜以来的毫秒。当你打印timedif时,你会得到什么?是30秒还是三个小时?这可能只是你的时钟和服务器关闭了15秒以上。 –

回答

1

的simpy使用绝对unix timeSystem.currentTimeMillis()

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

0

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

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

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