2010-06-29 3 views
1

Je possède ce code:La différence de date inclut le décalage horaire, quel est le problème?

Date now = new Date(); 
// the string is in UTC format, so a UTC date must be constructed, I don't know if that happens in this format 
Date measure = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(utcDateTime); 
long diff = now.getTime() - measure.getTime(); 
if (diff < 1000* 60 * 15) { 
    // measure is less then 15 minutes recent 
    do some work 
} 

Quand je reçois la diff, il comprend le fuseau horaire. Je sais que l'objet Date est en interne UTC.

Alors qu'est-ce qui ne va pas ici?

Répondre

3

Alors qu'un objet Date est bien en UTC, il se peut que votre SimpleDateFormat ne soit pas. Je soupçonne qu'il est par défaut dans le fuseau horaire du système - c'est certainement ce que l'expérimentation suggère. Vous pouvez changer cela en utilisant DateFormat.setTimeZone. Ainsi, si votre texte représente une date/heure UTC, vous devez également définir le fuseau horaire du formateur sur UTC.

Ou vous pouvez utiliser Joda Time, qui est une API de date et l'heure généralement mieux :)

+0

Merci, je vais garder à l'esprit Joda temps, même si je ne sais pas si elle est disponible pour Java 1.5 et Android. – Pentium10

Questions connexes