# Datumsberechnung Mit Hilfe von 2 Werten



## Cheefrocker (19. Mai 2005)

Hallo Zusammen!

Ich möchte ein Datum berechnen lassen! Dabei wird das Anfangsdatum analysiert und mit dem Enddatum verglichen.
Wenn ein Datum mit dem 1 Tag (nur dann) in diesem Monat anfängt z.b 1.05.05 und über den Monat hinausgeht gilt die 30 Tage-Regelung.(speichert das in die Variable Monate) sonst speichert er die Werte in die Variable Tage.

Ein kleines Rechenbeispiel: Startdatum: 1.5.05 Enddatum: 15.7.05

Rechnung: vom 1.5.05-31.5.05 gilt 30-Tageregelung = Sprich --> Monat++;(Monat = 1)
                vom 1.6.05-31.6.05 gilt 30-Tageregelung = Monat++;(Monat =2);
                vom 1.7.05-15.7.05 gilt normale Regelung = Tage++;

Das heisst es müsste: 2 Monate, 15 Tage ausgeben.

Das habe ich Versucht programmtechnisch zu lösen jedoch berechnet er mir das falsch. Könnt ihr mir weiterhelfen weil ich so langsam verzweifle! Danke an alle im voraus

hier mein Code:


```
int zaehler_index = 0;
  int monate = 0;
  int Tage_Abzug = 0;
  //Aufpassen da Monat immer von 0..11 Rechnet anstatt von 1..12 
  GregorianCalendar Von = new GregorianCalendar(2005,4,1);
  GregorianCalendar Bis  = new GregorianCalendar(2005,7,15);

  GregorianCalendar ZwischenSpeicher  = new GregorianCalendar();
  while((Von.before(Bis))||(Von.equals(Bis)))
  {
  //Erste Tag trifft zur
   if(Von.get(Calendar.DATE)==1)
   {
    ZwischenSpeicher.set(Von.get(Calendar.YEAR),Von.get(Calendar.MONTH)+1,Von.get(Calendar.DATE));
    ZwischenSpeicher.add(Calendar.DATE,-1);

    if(ZwischenSpeicher.before(Bis)||ZwischenSpeicher.equals(Bis))
    {
     monate++;
     Tage_Abzug = Tage_Abzug + ZwischenSpeicher.get(Calendar.DATE);
     System.out.println(Tage_Abzug);
     }


   }//Ende if

zaehler_index++;
Von.add(Calendar.DATE,1);
  }//Ende while
  zaehler_index = zaehler_index - Tage_Abzug;
  System.out.println("Zeitraum in Tagen:" + (zaehler_index));
  System.out.println("Zeitraum in Monate:" + (monate));

  }
```


----------



## mic_checker (19. Mai 2005)

Wenn ich das richtig seh willst du die Differenz zweier "Daten" haben, schau dir doch z.B. mal das hier  an.

Ansonsten - habs nicht getestet: was gibt er denn aus stattdessen?


----------



## Cheefrocker (19. Mai 2005)

@mic_checker ja die Differenz! 

Das Problem ist manchmal rechnet er es richtig und manchmal falsch! Gibt es keine andere Möglichkeit?? Verzweifle total an dieser Aufgabe!

Besten Dank!


----------



## Cheefrocker (19. Mai 2005)

@mic_checker Danke 

aber das hilft mir leider nicht weiter! Die Besonderheit liegt hier an dem Ersten Tag eines Monats! 

Man holt ja nicht nur die Differenz sondern überprüft ob es ein kompletter monat ist oder nicht!

Dies wird benötigt um z.b Rechnungen zu schreibe! Angenommen
du kriegst Geld vom : 2.5.05-2.7.05 . Das heisst in dem ersten Monat haste vom 2.5-31.5.05 haste 30 Tage. Die werden jedoch anders gerechnet als wenn du am 1.5.05 das Geld bekommen würdest.!Hier würde dann die 30-Tage regelung einsetzen da du ja geld bis zum 2.7.05 bekommst. 

Da du aber am 2.5.05-2.7.05 Geld kriegst. kriegst du für den 2.5.05-31.05.05 Tagesgeld. vom 1.6.05-31.6.05 Monatsgeld und vom 1.7.05-2.7.05 wieder Tagesgeld von 2 Tagen.

Sprich du hast dann : 1 Monat, und 32 Tage!

Das ist der ganze Unterschied! Hoffe das versteht einer


----------



## Cheefrocker (20. Mai 2005)

Ich habe die Lösung selbst rausgefunden. Für die jenigen die das eventuell gebrauchen können :


```
int zaehler_index = 0;
     int monate = 0;
     int Tage_Abzug = 0;
    GregorianCalendar Von = new GregorianCalendar(2004,5,10);
    GregorianCalendar Bis = new GregorianCalendar(2004,7,15);

  GregorianCalendar ZwischenSpeicher  = new GregorianCalendar();

  while((Von.before(Bis)))
  {
   if(Von.get(Calendar.DATE)==1)
   {

   //Hier bekommt dann den letzten Tag eines aktuellen  Monats
    ZwischenSpeicher.set(Von.get(Calendar.YEAR),Von.get(Calendar.MONTH)+1,Von.get(Calendar.DATE));
    ZwischenSpeicher.add(Calendar.DATE,-1);
   // System.out.println(ZwischenSpeicher);
   // System.out.println(Bis);
    if(ZwischenSpeicher.get(Calendar.MONTH)==Bis.get(Calendar.MONTH)&&
    ZwischenSpeicher.get(Calendar.DAY_OF_MONTH)==Bis.get(Calendar.DAY_OF_MONTH))
    {
    monate++;
    Tage_Abzug = Tage_Abzug + ZwischenSpeicher.get(Calendar.DATE);
    }
    else
    {
    if(ZwischenSpeicher.equals(Bis)||ZwischenSpeicher.before(Bis))
    {
     monate++;
     Tage_Abzug = Tage_Abzug + ZwischenSpeicher.get(Calendar.DATE);
     System.out.println(Tage_Abzug);
     }
    }
   }//Ende if

zaehler_index++;
Von.add(Calendar.DATE,1);
  }//Ende while
  zaehler_index = zaehler_index - Tage_Abzug+1;

 
  System.out.println("Zeitraum Tage : "+ zaehler_index);
   System.out.println("Zeitraum Monate : "+ monate);
  }
```


----------

