Datumsabfrage bei Verzinsung

Status
Nicht offen für weitere Antworten.

Sensewell

Mitglied
Moin zusammen,

wie ihr vielleicht schon gemerkt habt, bin ich gerade an einem Projekt. Mit der Applikation kann man Festgeldkonten und Girokonten erstellen. Nun möchte ich eine Verzinsung einführen.

Bei dem Girokonto soll bei jedem Kontostandabruf die Verzinsung gut geschrieben werden.


So werde ich das Handhaben. Beim Beenden des Programms wird das heutige Datum in ein File schreiben(date1). Beim nächsten login wird das heutige Datum mit dem date1 verglichen. Dabei sollen die Tage die dazwischen werden als Zahl zurück gegeben werden. Diese int benötige ich im weiteren um die Verzinsung zu berechnen.... Zinsformel etc. ! Solltet ihr eine elegantere Lösung haben um einen kontostand der sich ständig verändert zu verzinsen dann bitte schreibt. Ich wollte die sache so einfach wie möglich halten.


Der Unterschied zum Festgeldkonto: hier wird die Verzinsung nicht gleich gut geschrieben, sondern erst nach ablauf des Interfalls der Anlegung. (zb. 200 € ,3 Monate anlegen a p= 4%)
 
G

Guest

Gast
Wo sind die Daten zu deinem Kontoen denn abgelegt?

Ebenfalls in einer Datei oder in einer DB?

An sich ist dein Ansatz sicher nicht der verkehrteste wobei es eben auch auf das Umfeld ankommt was man da machen kann.
 
G

Guest

Gast
Wenn eh alles nur im Speicher vorliegt kannst du dir das letzte Datum auch in deinem Kontoobjekt hinterlegen. Einfach ne zusätzliche Variable mit rein und ne set...(Datum) und ne get() dazu, schon kannst du zu jedem Konto einfach das letzte Datum der Verzinsung abfragen und neu setzen.
 

Giftstachel

Bekanntes Mitglied
aaach.. ein ähnliches prob hatte ich auch schon mal..

ich habe dann einfach die differenz in tagen ausgerechnet, und durch anzahl tage/jahr geteilt. darauf dann den zinssatz, und fertig..

code tageberechner
Code:
  public class TageBerechner {

    /* Anzahl Tage zwischen zwei Datumswerten berechnen */
    public int berechneDiffTage(int bisTT, int bisMM, int bisJJJJ) {
      Calendar cal_1 = new GregorianCalendar();
      Calendar cal_2 = new GregorianCalendar();
      long time=0;
      int diffTage=0;
      cal_1.set(cal_2.get( Calendar.YEAR  ), cal_2.get( Calendar.MONTH )+1, cal_2.get( Calendar.DATE  )); // zweiter Zeitpunkt
      cal_2.set(bisJJJJ, bisMM, bisTT);
      time = cal_2.getTime().getTime() - cal_1.getTime().getTime(); // Differenz in ms
      diffTage = (int) Math.round( (long)time / (24. * 60.*60.*1000.) ); // Differenz in Tagen
      return diffTage;
    }
  }

irgendwo musst du noch einen tag abziehen, da du ja nur ab dem nächsten das ganze berechnen möchtest.
prüf das ergebnis am besten mit nem taschenrechner nach, damit du die eingangsvariablen auch richtig setzt, sonst gibts differenzen ;)
 

Sensewell

Mitglied
Code:
import java.util.Calendar;
import java.util.GregorianCalendar;


public class Verzinsung {

public static int berechneDiffTage(int bisTT, int bisMM, int bisJJJJ) {
    Calendar cal_1 = new GregorianCalendar();
    Calendar cal_2 = new GregorianCalendar();
    long time=0;
    int diffTage=0;
    cal_1.set(cal_2.get( Calendar.YEAR  ), cal_2.get( Calendar.MONTH )+1, cal_2.get( Calendar.DATE  )); 
    // zweiter Zeitpunkt
    cal_2.set(bisJJJJ, bisMM, bisTT);
    //time = cal_2.getTime().getTime() - cal_1.getTime().getTime(); // Differenz in ms
    diffTage = (int) Math.round( (long)time / (24. * 60.*60.*1000.) ); // Differenz in Tagen
    return diffTage;
  } 
public static void main(String[] args){
	
	System.out.println(Verzinsung.berechneDiffTage(22, 12, 2008));
	
}
}



gibt mir 0 zurück. was mach ich falsch?
 

Der Müde Joe

Top Contributor
wie wärs so?
Code:
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class X {

	public static int daysDiff(Date date) {
		Date dateNow = new Date();		
		long diff = dateNow.getTime() - date.getTime();
		int days = (int) (diff / (24 * 60 * 60 * 1000));
		return days;
	}

	public static void main(String[] args) {
		Calendar cal = new GregorianCalendar();
		//yesterday (months from 0 - 11 )
		cal.set(2008, 5, 9);
		System.out.println(X.daysDiff(cal.getTime()));
		//2 days ago
		cal.set(2008, 5, 8);
		System.out.println(X.daysDiff(cal.getTime()));
		//a month ago
		cal.set(2008, 4, 10);
		System.out.println(X.daysDiff(cal.getTime()));
		//1 year ago 
		cal.set(2007, 5, 10);
		System.out.println(X.daysDiff(cal.getTime()));

	}
}

EDIT:
wichtig zu wissen:
Calendar Monate beginnen bei 0 = Januar bis 11 = Dez. !!
 

Der Müde Joe

Top Contributor
Code:
	public static int daysDiff(Date date) {
		Date dateNow = new Date();
		if(dateNow.before(date)){
			System.out.println("date in future");
			return 0;
		}
		
		long diff = dateNow.getTime() - date.getTime();
		int days = (int) (diff / (24 * 60 * 60 * 1000));
		return days;
	}

EDIT:
oder lieber die Differenz der Zukunft:
Code:
	public static int daysDiff(Date date) {
		Date dateNow = new Date();
		long diff = dateNow.getTime() - date.getTime();
		int days = (int) (diff / (24 * 60 * 60 * 1000));
		if(days < 0){
			return -days;
		}
		return days;
	}
 

Sensewell

Mitglied
Code:
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class X {

	public static int daysDiff(Date date) {
	      Date dateNow = new Date();
	      if(dateNow.before(date)){
	         System.out.println("date in future");
	         return 0;
	      }
	      
	      long diff = dateNow.getTime() - date.getTime();
	      int days = (int) (diff / (24 * 60 * 60 * 1000));
	      return days;
	   }

   public static void main(String[] args) {
      Calendar cal = new GregorianCalendar();
      //yesterday (months from 0 - 11 )
      cal.set(2008, 12, 20);
  System.out.println(X.daysDiff(cal.getTime()));
   }
}


dann gibt er mir 0 zurück, also geht er in den if zweig

Ich werde die classe aber nur für tage in der zukunft brauchen.
 

Sensewell

Mitglied
doch noch eine Frage.

Ich werde ein datum in eine Datei schreiben, eben das datum an dem die verzinsung beginnt. dieses wird das Date() sein. Dann muss ich wohl bei monaten einen abziehen? das würde ich jetzt darunter verstehen. weil monate 0-11 sind. kann man das nicht auch von 1-12 umschreiben?
 

Der Müde Joe

Top Contributor
ich würde als Datum Date#getTime() schreiben.
Die ist ein long-Wert. Wenn du ihne wieder liest einfach in ein
Date Objekt stecken. Date beginnt bei der Epoche. Dies ist der:
Epoch, January 1, 1970 00:00:00.000 GMT (Gregorian).

also jedes Date ist x milisekunden nach der Epoche.

Bei Calendar ist es eben so das 0=Januar ist. also
cal.set(2008,0,1) ist der 1.Januar 2008
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben