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を使用して日付だけを比較したいのに対し、時間も考慮しているため、これは(私のシナリオでは)一貫性のない動作になります。それを行う方法はありますか?
私にお知らせください。
ありがとう!
日付のみを比較する場合は、LocalDate
ではなくDateTime
クラスを使用することをお勧めします。
JodaTimeのドキュメントはかなり良いです: http://joda-time.sourceforge.net/apidocs/org/joda/time/LocalDate.html
別の戦略は、それをフォーマットすることです。
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);
}
これはかなり古い質問ですが、回答を追加する価値があります。 Java 8で日時操作がサポートされていることを考えると、最近のJoda-timeは好ましくありません。それでもjoda-timeを使用する必要がある場合は、compareTo
メソッドを使用してください。 LocalDate
クラス内。
この部分を、順序を示す整数を返す別の部分と比較します。フィールドは、最大から最小まで順に比較されます。等しくない最初のフィールドは、結果を決定するために使用されます。
指定されたオブジェクトは、フィールドタイプがこのパーシャルのフィールドタイプと一致するパーシャルインスタンスである必要があります。
公式Java-docは here にあります。
DateTimeではなくLocalDateを使用するように切り替えます。 JodaTimeの概念は「部分的」です(ReadablePartialインターフェースを参照)。
解析後、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
を使用することをお勧めします。