2011-12-01 47 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

我可以想到至少有一個問題,EST是復活節標準時間,當我們切換到夏令時時會發生什麼情況,這會產生正確的時區EDT,可能會給您至少一個小時的時間。 : - /考慮到原帖的時間,這可能是一個相關的答案! –

回答

0

如果你能得到設備的時區考慮您的Web服務發送信號出現時間,例如那個時代(不millisecinds)+ - (單位:秒時區diffrence)現在你可以計算差值 epochlongvalue-(System.currentTimeMillis()/1000)您可以將這個值到hh:mm:ss Convert seconds value to hours minutes seconds?

相關問題