1

私はグーグルアプリエンジンに取り組んでいます。そして、クライアントから送信された時間とサーバーでの時間の差が15秒未満の場合、私は何かをする必要がある何かに取り組んでいます。テストサーバー(自分のマシン)で試してみると、コードは完全に機能します。しかし、コードがapp-engineにデプロイされると失敗します。サーバーのタイムゾーンが異なる場合、それが発生したときに数時間の加算/減算が行われる可能性があるためだと思います。

私が基本的に行うことは、クライアントにタイムスタンプを他のデータと一緒に送信させることです。その後、サーバーが時差を計算する必要がある場合、クライアントのタイムスタンプからサーバーのタイムスタンプをサブラクトします。

タイムゾーンが異なる場合は、明らかに問題が発生します。

このタイムゾーンの大失敗を回避するための1つの解決策は、サーバーに最初のリクエストとその後の処理の両方にタイムスタンプを付けることですが、私のアプリケーションでは、クライアントがリクエストを行ったときからタイマーが刻々と過ぎ始めることが不可欠です。クライアントに関して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

単純に絶対UNIX 時間を使用: System.currentTimeMillis().

この時間は絶対値です。つまり、1970 年 1 月 1 日 (UTC 午前 0 時) からのミリ秒数ではないため、単純に差を計算できます。

于 2012-12-06T14:44:27.003 に答える
0

@Diego Baschが指摘したように、時差が30分から1時間の大きさである場合、クライアントはサーバーと同じタイムゾーンにないため、タイムゾーンの差に対処する必要があります。

JavaScriptでクライアントのタイムゾーンを決定するには、を使用しnew Date().getTimezoneOffset()ます。注:UTCへのオフセットは分単位で返されます。

サーバーでは、でタイムゾーンを決定できるはずですCalendar.getInstance().getTimeZone()

于 2012-12-06T17:42:02.277 に答える