私はGWTRPCを使用して、日付を含む文字列をクライアントからサーバーに送信しています(これは、要求ヘッダー上にあるため、この方法で行う必要があります)。
サーバー側では、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 2012年11月
クライアント:2012-04-11 17:29:49 +0700
クライアントからのサーバー日付ヘッダー:2012-04-11 17:29:49 +0700x
=水4月1117:29:492012年11月
TomCat
- PCの使用:クライアントとサーバーは同時に使用できます。
(明らかに、クライアントの印刷物を見ることができません)
クライアントからのサーバー日付ヘッダー:2012-04-11 17:31:37 +0700
x = Wed Apr 11 17:31:37 NOVST 2012
- 携帯電話のクライアントは、サーバーとは異なります。
クライアントからのサーバー日付ヘッダー:2012-04-11 15:34:35 +0500
x = Wed Apr 11 17:34:35 NOVST 2012
結論:SimpleDateFormatは、文字列に含まれるタイムゾーンを無視します。欲しくない!これを正しく機能させたい。どうすればこれを機能させることができますか?よろしくお願いします。