最初の日付がカレンダー形式で、他の日付が文字列(DD-MMM-yyyy)形式である2つの日付を比較する必要があります。そこで、カレンダーの日付の1つを文字列に変換し、compareToメソッドを使用したいと思います。
私は使用してみました:
SimpleDateFormat formatter=new SimpleDateFormat("DD-MMM-yyyy");
String currentDate=formatter.format(view.getSelectedDay());
view.getSelectedDay()
がCalendar
を返すと仮定すると、次のようになります。
String currentDate = formatter.format(view.getSelectedDay().getTime());
(これにより、Date
に渡すformat
参照が得られます。)
それでも問題がない場合は、詳細をお知らせください。ちなみに「DD」ではなく「dd」も欲しいと思います。 SimpleDateFormat
のように、「DD」は年の日であり、「dd」は月の日です。 ドキュメント。
値を比較して、ある日付が別の日付より前であるかどうかを判断しますか、それとも並べ替えますか?あなたがそうなら、辞書式順序付けのためにいくつかのソート順の落とし穴に反するかもしれません。
String s = "12-11-2001";
String s2 = "13-11-2000";
int i = s.compareTo(s2);
System.out.println(i);
dATEとしてのs2はsの前にあるため、これの出力は-1であり、1である必要がありますが、昇順で並べ替えると、s2は辞書式順序でsの後になります。
文字列の日付をDateオブジェクトに変換してから、before()またはafter()を使用する方が賢明な場合があります。
日付を文字列として比較する場合は、SimpleDateFormat("yyyy-MM-dd")
を使用する必要があります。 SimpleDateFormat("dd-MM-yyyy")
形式を使用してそれらを比較すると、最下位の数値が最初にチェックされ、最上位の数値が最後にチェックされるため、ほとんどの場合間違っています。dd-MM-yyyy
形式を使用する必要がある場合は、文字列を分割し、年/月/日を正しい順序で比較して、正、負、またはゼロを返す関数を作成できます。
// Compares first date to second date and returns an integer
// can be used in a similar manner as String.CompareTo()
Public Static int CompareDates(String Date1, String Date2) {
String[] splitDate1 = Date1.split("-");
String[] splitDate2 = Date2.split("-");
int ret = -1;
if (splitDate1[2].CompareTo(splitDate2[2]) == 0) {
if (spliDatet1[1].CompareTo(splitDate2[1]) == 0) {
if (splitDate1[0].CompareTo(splitDate2[0]) == 0) {
ret = 0;
}
else if (splitDate1[0].CompareTo(splitDate2[0]) > 0) {
ret = 1;
}
}
else if (splitDate1[1].CompareTo(splitDate2[1]) > 0) {
ret = 1;
}
}
else if (splitDate1[2].CompareTo(splitDate2[2]) > 0) {
ret = 1;
}
Return ret;
}
Date
オブジェクトまたはCalendar
オブジェクトを比較するのが最善だと思います。非常に分解されて、これを与えます:
Date
オブジェクトの比較
final Calendar calendarDate = your_date_as_a_Calendar;
final String stringDate = your_date_as_a_String;
final SimpleDateFormat format = new SimpleDateFormat("DD-MMM-yyyy");
final Date dateA = calendarDate.getTime(); // this gives the absolute time, that actually embeds the date!
final Date dateB = format.parse(stringDate);
final int comparison = dateA.compareTo(dateB);
Calendar
オブジェクトの比較
final Calendar calendarA = your_date_as_a_Calendar;
final String stringDate = your_date_as_a_String;
final SimpleDateFormat format = new SimpleDateFormat("DD-MMM-yyyy");
final Calendar calendarB = new GregorianCalendar();
calendarB.setTime(format.parse(stringDate));
final int comparison = calendarA.compareTo(calendarB);
そして、comparison
は< 0
の場合はA < B
、> 0
の場合はA > B
、等しい場合は== 0
になります 日付のドキュメント または カレンダーの 。
注意しなければならないのは次のとおりです。