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()確定時區。