web-dev-qa-db-ja.com

2つのJoda-Time DateTimeオブジェクトの比較

私はここで尋ねられたものに非常に似たものを扱っています- Joda-Timeタイムゾーンを比較してください ですが、私にはうまくいかないようです。

私がテストしているコードは次のとおりです Joda-TimeDateTime with-

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

興味深いことに、上記の両方のsysoutステートメントから「false」になります。誰でもこの比較を行う正しい方法を説明できますか?

30
FSP

2つのDateTimeインスタンスを作成している可能性があります。おそらく、同じ瞬間を表しますが、タイムゾーンは異なります。どちらも前後にはありません。

タイムゾーンは、getHourOfDay()のような日付/時刻メソッドがインスタントを時間に変換する方法にのみ影響します。

18
Andy Thomas

isAfter および isBefore メソッドは、日付をミリ秒で比較します(タイムゾーンを無視)。

あなたの例では、日付は等しいミリ秒です。

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

trueを出力します。

表現

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

等しい

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