2011-12-01 5 views
3

Je n'ai pas encore trouvé une approche simple à cela. J'ai vu des tonnes d'exemples différents, certains se heurtent les uns avec les autres, d'autres utilisent des appels obsolètes, je ne sais pas pourquoi c'est si difficile de trouver une réponse solide.Android: Convertir 2 fuseaux horaires différents en UTC et calculer leur différence en jours, heures et minutes

J'ai donc un horodatage retourné d'un service Web avec ce format:

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

* Il est en heure de l'Est, même si le fuseau horaire ne fait pas partie de leur horodatage. Tout ce que je veux savoir est la meilleure façon de calculer la différence de temps entre l'horodatage du service Web (EST) et l'horodatage actuel du téléphone utilisé, qui pourrait être dans n'importe quel fuseau horaire. Ensuite, affichez cette différence comme un compte à rebours dans les jours restants, les heures restantes et les minutes restantes.

Actuellement, je suis en train de faire quelque chose comme ceci:

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(); 
} 

... et quelque chose ne va pas avec les conversions de fuseau horaire que les différences de temps ne sont pas exactes. Toute aide est très appréciée. Merci d'avance.

+1

Pouvez-vous être plus précis sur ce qu'est le problème? – Phil

+0

Le problème est que ma différence de temps entre deux horodatages avec des fuseaux horaires différents n'est pas précise. – askilondz

+0

Je peux penser à au moins un problème, EST est Easter Standard Time, ce qui se passe lorsque nous passons à l'heure d'été, qui fait alors le bon fuseau horaire, EDT, qui pourrait vous donner au moins une heure de congé. : -/Compte tenu de l'heure du message original, cela pourrait être une réponse pertinente! –

Répondre

0

Si vous pouvez obtenir le fuseau horaire de l'appareil envisager d'envoyer le temps d'époque de votre service Web tel que l'époque (pas millisecinds) + - (fuseau horaire diffrence en quelques secondes), vous pouvez maintenant calculer la différence epochlongvalue-(System.currentTimeMillis()/1000) vous pouvez convertir cette valeur à hh: mm: ss Convert seconds value to hours minutes seconds?

Questions connexes