2011-12-01 2 views
3

私はこれに直接的なアプローチをまだ見つけていません。私は数多くの異なる例を見てきました。実際にはお互いに衝突していました。他の人は非難された呼び出しを使用しています。なぜこれが難しいのか分かりません。Android:2つの異なるタイムゾーンをUTCに変換し、日、時間、および分の差を計算してください。

だから私は、タイムスタンプはこの形式でWebサービスから返されています:

"yyyy-MM-dd hh:mm:ss" 

*時間はタイムゾーンがそのタイムスタンプの一部ではないにもかかわらず、東部標準時です。

私が知りたいのは、Webサービスのタイムスタンプ(EST)と、使用されている電話機の現在のタイムスタンプとの時間差を計算する最良の方法です。これは任意のタイムゾーンで行うことができます。その後、その差を、左、数時間、分のカウントダウンとして表示します。

現在、私はこのような何かやってる:

public String getTimeLeft(String date) { 
    StringBuilder dateString = new StringBuilder(); 
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
    formatter.setTimeZone(TimeZone.getTimeZone("EST")); 
    Date dateObj = formatter.parse(date); 

    Time time = new Time(Time.getCurrentTimezone()); 
    time.set(dateObj.getTime()); 
    time.timezone = Time.TIMEZONE_UTC; 
    long timeInMill = time.normalize(true); 
    endCal.setTimeInMillis(timeInMill); 

    currCal.setTime(new Date()); 

    long timeDiff = endCal.getTimeInMillis() - currCal.getTimeInMillis(); 
    int days = (int) (timeDiff/(1000*60)); 
    int hours = (int) ((timeDiff/(1000*60*60))%24); 
    int minutes = (int) ((timeDiff % (1000*60*60))/(1000*60)); 

    dateString.append(days + (days == 1 ? " DAY " : " DAYS ")); 
    dateString.append(hours + (hours == 1 ? " HOUR " : " HOURS ")); 
    dateString.append(minutes + (minutes == 1 ? " MINUTE " : " MINUTES ")); 

    return dateString.toString(); 
} 

を...と、時間差は正確ではありませんと何かがタイムゾーンの変換と間違っています。どんな助けでも大歓迎です。前もって感謝します。

+1

問題の詳細について具体的に説明できますか? – Phil

+0

問題は、タイムゾーンが異なる2つのタイムスタンプ間の時間差が正確でないことです。 – askilondz

+0

私は少なくとも1つの問題を考えることができます。ESTはイースター標準時です。夏時間に切り替えると何が起きて、少なくとも1時間遅れるかもしれない正しいタイムゾーンEDTが作られます。 : - /元の投稿の時間を考慮すると、これは関連する回答かもしれません! –

答えて

0

あなたは、デバイスのタイムゾーンは、Webサービスからのエポックタイムを送ることを考え得ることができる場合は、その結果エポック(ないmillisecindsで)+ - (秒単位でタイムゾーンdiffrence)今、あなたは、この値を変換することができ epochlongvalue-(System.currentTimeMillis()/1000)の差を計算することができます〜hh:mm:ss Convert seconds value to hours minutes seconds?

関連する問題