2011-12-01 84 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?

相关问题