public SortedMap<Long, Boolean> berechneZustandsWechselZustand(Long von, Long bis, int jahr)
  {
    // Die Abfrage besitzt eine eigene Zustandsliste
    // ListeZustandsWechsel listeZustandsWechselAbfrage = new ListeZustandsWechsel();
    listeZustandsWechsel = new ListeZustandsWechsel();

    long time = 0;
    long days = 0;
    Calendar cal1 = new GregorianCalendar().getInstance();
    Calendar cal2 = new GregorianCalendar();
    Calendar tmp = new GregorianCalendar();

    SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss,SSS");
    Date dt = new Date();

    int diff = jahr - cal1.get(Calendar.YEAR);
    int temp = cal1.get(Calendar.YEAR) + diff;

    try
    {

      cal1.setTimeInMillis(von);
      cal2.setTimeInMillis(bis);

      // cal1.set(Calendar.YEAR, temp);
      // cal2.set(Calendar.YEAR, temp);

      // Die Abfrage beginnt um...
      cal1.set(Calendar.HOUR_OF_DAY, 0);
      cal1.set(Calendar.MINUTE, 0);
      cal1.set(Calendar.SECOND, 0);
      cal1.set(Calendar.MILLISECOND, 0);

      // Die Abfrage endet um...
      cal2.set(Calendar.HOUR_OF_DAY, 23);
      cal2.set(Calendar.MINUTE, 59);
      cal2.set(Calendar.SECOND, 59);
      cal2.set(Calendar.MILLISECOND, 999);

      // Wie viele Tage hat das Jahr?
      time = cal2.getTime().getTime() - cal1.getTime().getTime();
      days = Math.round((double)time / (24. * 60. * 60. * 1000.));

      // Der erste Tag der Abfrage endet um...
      cal2.setTimeInMillis(von);
      cal2.set(Calendar.YEAR, temp);
      cal2.set(Calendar.HOUR_OF_DAY, 23);
      cal2.set(Calendar.MINUTE, 59);
      cal2.set(Calendar.SECOND, 59);
      cal2.set(Calendar.MILLISECOND, 999);

      if (definition.equalsIgnoreCase("ostersonntag"))
      {

        Ostern ostersonntag = new Ostern();
        cal1 = ostersonntag.Ostersonntag(temp);

        // Der Ostersonntag beginnt um...
        dt = df.parse(cal1.get(Calendar.DATE) + "." + (cal1.get(Calendar.MONTH) + 1) + "." + temp + " 00:00:00,000");
        cal1.setTime(dt);

        // ...und endet um...
        dt = df.parse(cal1.get(Calendar.DATE) + "." + (cal1.get(Calendar.MONTH) + 1) + "." + temp + " 23:59:59,999");
        cal2.setTime(dt);

        // ...er dauert natuerlich auch nur...
        days = 1;

      }

    }
    catch (ParseException e)
    {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    DateFormat df_ger = DateFormat.getDateInstance(DateFormat.FULL, Locale.GERMANY);
    for (int i = 0; i < days; i++)
    {

      // Man spricht Deutsch!
      String datum = df_ger.format(cal1.getTime()).toLowerCase();

      // Wochentag ist hier...
      String woTag = definition;

      if (definition.equals("tag"))
      {
        // listeZustandsWechselAbfrage.getListeZustandsWechsel().put(cal1.getTimeInMillis(), true);
        listeZustandsWechsel.getListeZustandsWechsel().put(cal1.getTimeInMillis(), true);
      }
      else if (definition.equals("ostersonntag"))
      {

        // listeZustandsWechselAbfrage.getListeZustandsWechsel().put(cal1.getTimeInMillis(), true);
        listeZustandsWechsel.getListeZustandsWechsel().put(cal1.getTimeInMillis(), true);

      }
      else if (datum.contains(woTag))
      {

        // listeZustandsWechselAbfrage.getListeZustandsWechsel().put(cal1.getTimeInMillis(), true);
        listeZustandsWechsel.getListeZustandsWechsel().put(cal1.getTimeInMillis(), true);

      }

      tmp = cal1;
      tmp.add(Calendar.DATE, 1);
      cal1 = tmp;

      if (definition.equals("tag"))
      {
        // listeZustandsWechselAbfrage.getListeZustandsWechsel().put(cal2.getTimeInMillis(), false);
        listeZustandsWechsel.getListeZustandsWechsel().put(cal2.getTimeInMillis(), false);
        // listeZustandsWechselAbfrage.getListeZustandsWechsel().put(cal2.getTimeInMillis()+1, false);
      }
      else if (definition.equals("ostersonntag"))
      {

        // listeZustandsWechselAbfrage.getListeZustandsWechsel().put(cal2.getTimeInMillis(), false);
        listeZustandsWechsel.getListeZustandsWechsel().put(cal2.getTimeInMillis(), false);
        // listeZustandsWechselAbfrage.getListeZustandsWechsel().put(cal2.getTimeInMillis()+1, false);

      }
      else if (datum.contains(woTag))
      {

        // listeZustandsWechselAbfrage.getListeZustandsWechsel().put(cal2.getTimeInMillis(), false);
        listeZustandsWechsel.getListeZustandsWechsel().put(cal2.getTimeInMillis(), false);
        // listeZustandsWechselAbfrage.getListeZustandsWechsel().put(cal2.getTimeInMillis()+1, false);

      }

      tmp = cal2;
      tmp.add(Calendar.DATE, 1);
      cal2 = tmp;

    }

    // return listeZustandsWechselAbfrage.getListeZustandsWechsel();
    return listeZustandsWechsel.getListeZustandsWechsel();
  }