2012-04-11 12 views
3

私はGWT RPCを使用してクライアントからサーバーに日付を含む文字列を送信しています(リクエストヘッダー上にあるため、この方法が必要です)。GWTクライアント - サーバSimpleDateFormatがタイムゾーンをデフォルトに変更しました

サーバー側で、SimpleDateFormatでその文字列を解析し、必要なロジックを作成します。

私は自分の携帯電話とコンピュータの両方を異なるタイムゾーンに設定しており、ホストモードを使用してtomcatでテストプロジェクトを実行します。

クライアント::

DateTimeFormat dtf = DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss Z"); 
Date date = new Date(); 

System.out.println("client: " + date.toString()); 
System.out.println("client: " + dtf.format(date)); 
builder.setHeader("Date1", dtf.format(date)); 

サーバー:

String dateHeader = request.getHeader("Date1"); 
System.out.println("Server date header from client: " + dateHeader); 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z"); 

System.out.println("x = " + sdf.parse(dateHeader)); 
System.out.println("Timezone = " + df.getTimeZone().getDisplayName()); 

結果:水曜日4月11日17:29:モード
クライアントをホスト

ここ

コードです:49 NOVST
クライアント:2012-04-11 17:29:49 +0700
クライアントのサーバー日付ヘッダー:2012-04-11 17:29:49 +0700
x =水曜日Apr 11 17:29:49 NOVST PCの使用2012


Tomcatの

  1. :クライアント、およびサーバが同じ時間を持っています。クライアントから

(明らかに、クライアントのプリントを参照することはできません)

Serverの日付ヘッダ:2012-04-11 17時31分37秒0700
X =水曜日4月11日17 :31:37 NOVST 2012

  1. 携帯電話クライアントは、サーバーとは異なります。

クライアントからサーバー日付ヘッダを:2012-04-11 15時34分35秒0500
X =水4月11日午後05時34分35秒NOVST 2012

結論: てSimpleDateFormatは、そのタイムゾーンを無視文字列に来る。私はそれを望んでいない!私はこれが適切に動作するようにします。どうすればこの作品を作れますか?進んでいただきありがとうございます。

答えて

1

SimpleDateFormatそれは時間を調整したとして午前15時34分35秒0500を解析し、タイムゾーンを無視しない17時34分35秒NOVSTNOVSTは0700、ローカルタイムゾーンであります)、それはちょうどjava.util.DateがEpochからのタイムスタンプであり、タイムゾーンの概念を持たないということです(javadocを参照してください:すべてはローカルタイムゾーンを基準にしています)。

サーバー側でクライアントのタイムゾーンを取得する場合は、シリアル化された日付からタイムゾーンフィールドを解析する必要があります(スペースを分割して最後の部分、接頭辞はGMTjava.util.TimeZone.getTimeZone()です)。
JodaTimeを使用して、DateTimeタイプでタイムゾーン情報を記録することもできます。次のようなものです:

DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss Z"); 

DateTime dt = fmt.parseDateTime(dateHeader); 
System.out.println("x = " + fmt.print(dt)); 
System.out.println("Timezone = " + dt.getZone().toTimeZone().getDisplayName()); 
+0

あなたのご意見ありがとうございます。私はこれらの2つのオプションについて考えていた、タイムゾーンを分離するか、またはJodaTimeを使用する。私はすでにJodaTimeを試していますが、それはホストモードではうまくいきますが、私はそれをtomcatインスタンスで動作させることはできません。 –

関連する問題