Sprawdzenie czy data mieści się w zadanym przedziale

0

Witam, tak jak jest napisane w temacie, moim zadaniem jest sprawdzenie czy podana data mieści się w przedziale dat zawartych w arrayliscie. Chciałem na początku sprawdzić, czy w ogóle znajduje mi jakąś datę z listy, ale niestety nie działa to dobrze.

public class Znajdz_datke {
	public static void main(String[] args) 		
	{
		
		Date myDate0 = new Date(2014, 01, 8);  // from 
		Date myDate1 = new Date(2014, 03, 9);	// to	
		
		Date myDate2 = new Date(2014, 06, 15);  // from
		Date myDate3 = new Date(2014, 07, 25);  // to
		
			
	List<Date> listOfDates = new ArrayList<Date>();
	listOfDates.add(myDate0);
	listOfDates.add(myDate1);
	listOfDates.add(myDate2);
	listOfDates.add(myDate3);
			
	// kluczen będzie datka !
	Date key = new Date(2015, 05, 9);     
	
		Collections.sort(listOfDates);
				int index = Collections.binarySearch(listOfDates, key, new MyDateComparator());
				if (index != -1) {
				 System.out.println("Found it !");  // to się wyświetla ..
				}
				else
					System.out.println("Not");		
	}
}

 class MyDateComparator implements Comparator<Date> {
    protected static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy/MM/dd");

    public int compare(Date d1, Date d2) {
        return DATE_FORMAT.format(d1).compareTo(DATE_FORMAT.format(d2));
    }
}

Mógłby ktoś podpowiedzieć jak sobie poradzić z tym ?

0

Dziwnie to wygląda, sortujesz wg jakiegoś komparatora, a szukasz wg innego. Jest to raczej niegroźne, te komparatory są równoważne.
Wywołanie

int index = Collections.binarySearch(listOfDates, key, new MyDateComparator());

zwraca -5, i w tej sytuacji powinno zwrócić -5. Zajrzyj do dokumentacji, co zwraca metoda binarySearch.

0

Ok, czyli ona zwraca indeks tablicy pod którym dany element się znajduję ( o ile się znajduję, a jak się nie znajduję to zwraca ->( -( miejsce wstawienia) - 1), czyli w tym wypadku -5 czyli działa ok.. ), czyli ta metoda nie będzie chyba dobra żeby sprawdzić, czy data znajduje się w jakimś przedziale datowym?

0

Niczego Ci nie doradzę, bo nie rozumiem zdania

czy podana data mieści się w przedziale dat zawartych w arrayliscie

0

Przepraszam za niedokładność, chodzi mi o to, że mam listę: List<Date> listOfDates = new ArrayList<Date>(); i w niej są daty np. Date myDate0 = new Date(2014, 01, 8); , Date myDate1 = new Date(2014, 01, 12); Date myDate2 = new Date(2014, 03, 8); Date myDate3 = new Date(2014, 03, 10);i chcę sprawdzić czy jakaś inna data (podana np. z klawiatury) mieści się w tym przedziale dat ( między myDate0 a myDate1 oraz myDate2 a myDate3). Czyli generalnie mam zrobić coś takiego, że mam pary dat ( rozpoczęcia i zakończenia) i teraz wprowadzam z klawiatury jakąś datę i mam rozpoznać czy ta data mieści się w parach tych dat.

1

Konstruktor Date(year,month,day) jest deprecated, nie używaj go. (A jeśli nie możesz się z nim rozstać, to używaj go rozsądnie. Podane przez Ciebie przykładowe daty są z roku 3914.)
Sortowanie kolekcji dat jest błędem.

int i = 0;
boolean jest = false;
while(...)
{
     if(key.after(listOfDates.get(i)) && key.before(listOfDates.get(i+1))
     {
          jest = true;
          break;         
     }
     i+=2; 
}

Warunek w while wymyśl sam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1