2011-07-20 22 views
7

異なるタイムゾーンで2つの日付の時間差を取得する必要があります。現在、私はこれをやっている:Androidアンドロイドの2つのタイムゾーンの時間差を取得する方法は?

Calendar c1=Calendar.getInstance(TimeZone.getTimeZone("EDT")); 
Calendar c2=Calendar.getInstance(TimeZone.getTimeZone("GMT")); 
String diff=((c2.getTimeInMillis()-c1.getTimeInMillis())/(1000*60*60))+" hours"; 
new AlertDialog.Builder(this).setMessage(diff).create().show(); 

私は0時間を得る。私は間違って何をしていますか?

答えて

11

getTimeInMillis()は、UTCの時代からのミリ秒数を返します。言い換えれば、タイムゾーンはそれとは無関係です。

私はあなたが実際にしたい疑う:

long currentTime = System.currentTimeMillis(); 
int edtOffset = TimeZone.getTimeZone("EDT").getOffset(currentTime); 
int gmtOffset = TimeZone.getTimeZone("GMT").getOffset(currentTime); 
int hourDifference = (gmtOffset - edtOffset)/(1000 * 60 * 60); 
String diff = hourDifference + " hours"; 
+0

夏時間の場合はどうなりますか?それはそれを扱うだろうか? – Gugan

+1

@Gugan:タイムゾーン名の短縮形を使用するとどうなるのか分かりませんが、「ヨーロッパ/ロンドン」などのフルタイムゾーンIDを指定すると、実際に夏時間が処理されます。 –

+0

ありがとうございました。私はそれをチェックします。 – Gugan

0

は、ジョンは近いが、私は彼の答えを編集することはできません文字の制限によるものです。これは同じコードですが、東部標準時の「EDT」が「EST」に変更されています。

long currentTime = System.currentTimeMillis(); 
int edtOffset = TimeZone.getTimeZone("EST").getOffset(currentTime); 
int gmtOffset = TimeZone.getTimeZone("GMT").getOffset(currentTime); 
int hourDifference = (gmtOffset - edtOffset)/(1000 * 60 * 60); 
String diff = hourDifference + " hours"; 

しかし、このソリューションはTimeZone.getAvailableIDsを()はそれの文字列配列「EST」と「GMT」の両方の中に持っていることを主要な仮定を作ります。そのメソッドにタイムゾーン文字列が含まれていない場合、0オフセットとして返されます。

関連する問題