Datumsberechnung Mit Hilfe von 2 Werten

Status
Nicht offen für weitere Antworten.

Cheefrocker

Bekanntes Mitglied
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:

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

Top Contributor
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

Bekanntes Mitglied
@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

Bekanntes Mitglied
@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

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

Code:
 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);
  }
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben