web-dev-qa-db-fra.com

Comparaison de deux objets Joda-Time DateTime

J'ai affaire à quelque chose de très similaire à ce qui a été demandé ici - comparer les fuseaux horaires Joda-Time mais cela ne semble pas fonctionner pour moi.

Voici un morceau de code que je teste Joda-TimeDateTime avec -

 DateTime estDT = new DateTime(DateTimeZone.forID("America/Puerto_Rico")).withMillisOfSecond(0); 
 DateTime londonDT = new DateTime(DateTimeZone.forID("Europe/London")).withMillisOfSecond(0);

    System.out.println("Comparison " + londonDT.isBefore(estDT)); 
    System.out.println("Comparison " + londonDT.isAfter(estDT)); 

Chose intéressante, je reçois "faux" des deux déclarations sysout ci-dessus. Quelqu'un peut-il expliquer quelle sera la bonne façon de faire cette comparaison?

30
FSP

Vous créez deux instances DateTime représentant probablement le même instant dans le temps, mais avec des fuseaux horaires différents. Ni avant ni après l'autre.

Le fuseau horaire affecte simplement la façon dont les méthodes de date/heure telles que getHourOfDay() convertissent l'instant dans le temps.

18
Andy Thomas

Les méthodes isAfter et isBefore comparent les dates par millis (en ignorant le fuseau horaire).

Dans votre exemple, les dates ont des millis égaux.

System.out.println(londonDT.getMillis() == estDT.getMillis());  

affichera true.

Expressions

londonDT.isBefore(estDT) 
londonDT.isAfter(estDT)

sont égaux à

londonDT.getMillis() < estDT.getMillis()  
londonDT.getMillis() > estDT.getMillis()
53
Ilya