我正在开发谷歌应用程序引擎。如果客户端发送的时间和服务器上的时间之间的时间差小于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;
所以基本上,我的问题是如何将时区变化标准化?
感谢
System.currentTimeMillis()
。
这个时间是绝对的,即自1970年1月1日UTC午夜以来没有毫秒),所以你可以简单地计算差值。
正如@Diego Basch所指出的,如果时差在30分钟到全小时之间,则应该处理时区差异,因为您的客户端与服务器不在同一时区。
您可以使用new Date().getTimezoneOffset()
在JavaScript中确定客户端时区。注意:UTC的偏移量以分钟为单位返回。
在服务器上,您应该能够使用Calendar.getInstance().getTimeZone()
确定时区。