web-dev-qa-db-ja.com

Java Joda Timeで「isBefore」を使用した日付のみの比較

DateTimeオブジェクトとisBefore関数で日付のみを比較する方法はありますか?

例として、

DateTime start = new DateTime(Long.parseLong(<someInput>));
DateTime end   = new DateTime(Long.parseLong(<someInput>));

今私がするとき、

while (start.isBefore(end)) { 
   // add start date to the list
   start = start.plusDays(1);
}  

IsBeforeを使用して日付だけを比較したいのに対し、時間も考慮しているため、これは(私のシナリオでは)一貫性のない動作になります。それを行う方法はありますか?

私にお知らせください。

ありがとう!

14
test123

日付のみを比較する場合は、LocalDateではなくDateTimeクラスを使用することをお勧めします。

JodaTimeのドキュメントはかなり良いです: http://joda-time.sourceforge.net/apidocs/org/joda/time/LocalDate.html

21
Tim Gage

別の戦略は、それをフォーマットすることです。

DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
DateTime newStart = df.parse(start);
DateTime newEnd = df.parse(end);

while (newStart.isBefore(newEnd)) { 
  // add start date to the list
  newStart = newStart.plusDays(1);
}    
9
FAtBalloon

これはかなり古い質問ですが、回答を追加する価値があります。 Java 8で日時操作がサポートされていることを考えると、最近のJoda-timeは好ましくありません。それでもjoda-timeを使用する必要がある場合は、compareToメソッドを使用してください。 LocalDateクラス内。

この部分を、順序を示す整数を返す別の部分と比較します。フィールドは、最大から最小まで順に比較されます。等しくない最初のフィールドは、結果を決定するために使用されます。

指定されたオブジェクトは、フィールドタイプがこのパーシャルのフィールドタイプと一致するパーシャルインスタンスである必要があります。

公式Java-docは here にあります。

1
Saikat Sengupta

DateTimeではなくLocalDateを使用するように切り替えます。 JodaTimeの概念は「部分的」です(ReadablePartialインターフェースを参照)。

1
drobert

解析後、DateTimeの時間をゼロ(真夜中を意味する)に設定できます。

// withTime sets hours, minutes, seconds, milliseconds
DateTime start = new DateTime(Long.parseLong(<someInput>)).withTime(0, 0, 0, 0);
DateTime end   = new DateTime(Long.parseLong(<someInput>)).withTime(0, 0, 0, 0);

または、他のJoda Timeクラスのいずれかを使用します。 DateTimeだけではありません。日付のみを扱う場合は、LocalDateではなくDateTimeを使用することをお勧めします。

0
Jesper