特定の日付が特定の下限と上限内にあるかどうかを確認することになっているメソッドをまとめました。
時間は考慮せず、日付のみを考慮してください。非常に単純な作業のように見えましたが、デバッグ中に奇妙な動作が発生しました。
入力日付から時間値を削除するために、さまざまなアプローチを試しました。( .) しかし、それらはすべて、日付を前に置いて関数の結果を偽にするinDate
という同じ予期しない動作を私に与えるようです。inLeft
inLeft
スクリーンショットからわかるように、inLeft
とinLeft
は等しい (時間を無視した場合) のに、なぜint leftLimit = DateTimeComparator.getDateOnlyInstance().compare(inLeft, inDate);
0 ではなく 1 になるのでしょうか?
私の結論は、私は何か間違ったことをしているが、何が見つからないということです。これがまったく明白なことである場合は、ご容赦ください。
ここに私のコードがあります:
protected boolean checkDateInRange(Date inDate, Date inLeft, Date inRight) {
System.out.println("inDate = " + inDate);
System.out.println("inLeft = " + inLeft);
System.out.println("inRight = " + inRight);
int leftLimit = DateTimeComparator.getDateOnlyInstance().compare(inLeft, inDate);
int rightLimit = DateTimeComparator.getDateOnlyInstance().compare(inDate, inRight);
System.out.println("leftLimit = " + leftLimit);
System.out.println("rightLimit = " + rightLimit);
if (leftLimit > 0 || rightLimit > 0) {
return false;
}
return true;
}
I/System.out: inDate = Mon Sep 26 00:00:00 GMT+02:00 2016
I/System.out: inLeft = Mon Sep 26 20:14:13 GMT+02:00 2016
I/System.out: inRight = Mon Sep 26 00:00:00 GMT+02:00 2016
I/System.out: leftLimit = 1
I/System.out: rightLimit = 0
問題は、0 ではなく leftLimit == 1 であり、inDate と時間のない inLeft が同じであることです。しかし、leftLimit の結果は 1 のままです。
編集(最終的な解決策):sumandas'とRobertsの解決策によると、期待される動作を実現する新しいメソッドを作成しました。
新しいコード:
protected boolean checkDateInRange(Date inDate, Date inLeft, Date inRight) {
SimpleDateFormat simpleDateFormatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = simpleDateFormatter.format(inDate);
String leftString = simpleDateFormatter.format(inLeft);
String rightString = simpleDateFormatter.format(inRight);
if (leftString.compareTo(dateString) > 0 || dateString.compareTo(rightString) > 0)
return false;
return true;
}
なぜ私の最初の解決策がうまくいかないのか、私はまだ理解していません。