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?
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.
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()