2012-06-25 21 views
5

Android携帯電話(Nexus one)とJavaサーバーの間の時間変換に少し問題があります。私が読んだものはすべて同じであると言われていますが、私が長いタイムスタンプを変換すると、私は1時間(正確に)失うようです。Android時間とJava時間

具体的には、私は次の出力を得るのAndroidデバイス上で、次のコードを実行した場合

コード:

Calendar g = Calendar.getInstance(); 
g.setTimeInMillis(1340661899000L); 
Log.d(TAG, g.getTime().toLocaleString()); 

出力: 2012年6月25日午前六時04分59秒PM

私は正しいと思いますが、javaサーバで全く同じコードを実行すると、同じ日に1時間早くなります。

コード:

Calendar g = Calendar.getInstance(); 
g.setTimeInMillis(1340661899000L); 
System.out.println(g.getTime().toLocaleString()); 

出力:誰もがこれを引き起こしている可能性が何 25 - 6月 - 2012年5時04分59秒PM

を知っていますか?サーバーの電話機と電話機が同じ場所にある(問題ではない)とサーバーボックスと電話機の時計が一致する

+1

クライアントの時刻ロケールがわからないため、クライアントとサーバー間の通信にローカライズされた時間を使用したくない場合があります。 –

+0

値1340661899000Lは現地時間でなければなりません。私はちょうど与えられた時間がデバイスのタイムゾーンにあることを表示したい –

+2

クライアントとサーバーの両方が同じタイムゾーン/モードになることを期待しています。 –

答えて

4

これは1時間の違いを考慮すると、DST(Daylight貯蓄時間)はサーバー上で設定されていて、電話では設​​定されていません。

+0

さて、私はまさかのような気分になりました。電話の時計が正しい時刻だったにもかかわらず、何らかの理由で、電話のバージョンのtoLocaleStringがDSTを考慮に入れていなかった。 –

+0

@ JohnSこれは、ローカル日時値での作業を避けるべき理由の例です。データ通信、ビジネスロジック、データストレージ、サーバークロックをすべて[UTC](http://en.m.wikipedia.org/wiki/Coordinated_Universal_Time)に入れてください(例外はほとんどありません)。ローカルタイムゾーンに変換する - データのユーザーまたは消費者が予想した場合にのみ調整します。 –

1

クリスはあなたの電話とサーバーが異なるタイムゾーンに設定されていると言います。

cal.getTimeZone()の結果を印刷してみてください。これが問題の場合は、通信に使用するタイムゾーンを選択することになります。例えば:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+0")); 

カレンダーのインスタンスはによって報告されたデフォルトのタイムゾーンを使用Javadocには、同じタイムゾーンに設定されているサーバーとモバイルにもかかわらず

TimeZone.getDefault() 

は、必ずしもそれらが同じを使用する意味ないかもしれませんデフォルトのTimeZone。