# alter mit Date ausrechnen



## nata (28. Okt 2010)

Hallo Leute,
ich brauche wiederum hilfe. Es geht darum, dass ich alter ausrechnen möchte und läuft irgendwie falsch
ich schicke meine Programstück


```
public int getAlter() {

		Date now = new Date();
		int alter =  (int) ((now.getTime() - baujahr.getTime())
				/ (1000 * 60 * 60 * 24 * 365));

		return alter;
	}
```

wenn ich mit 
	
	
	
	





```
new Date(102,9,23)
```
 getAlter ausrechnen möchte bekomme ich 171 jahrige fahrzeug aber hauptsächlich ist doch mit diese angabe, dass das fahrzeug am 2002 jahr gebaut
wo ist mein fehler?
danke im vorraus


----------



## Gast2 (28. Okt 2010)

Nimm den Calendar.
Dann brauchste dich mit sowas nicht rumschlagen 
Java Date und Calendar


----------



## Leifa (28. Okt 2010)

Liegt vielleicht auch daran, dass das Produkt größer als 2^31 ist. Damit übersteigt es den Integer-Bereich.
Probier es mal mit long statt int.


----------



## nata (28. Okt 2010)

leider ändert sich nichts


----------



## Der Müde Joe (28. Okt 2010)

```
long day = 1000 * 60 * 60 * 24l;
Date baujahr = new Date(System.currentTimeMillis() - (day * 366));
Date now = new Date();
long alter =  now.getTime() - baujahr.getTime();
System.out.println(alter); //ms
System.out.println(alter / day);
```


----------



## nata (28. Okt 2010)

ich habe auch methode 
	
	
	
	





```
public Date getBaujahr() {
		return baujahr;
	}
```

was solte ich in meine methode getAlter() ändern?eigentlich scheint es richtig zu sein


----------



## nata (28. Okt 2010)

also ich habe statt dem

```
public long getAlter() {
			
			Date now = new Date();
			long yearInMillis = 365 * 24 * 60 * 60  * 1000;
			long alter =   (now.getTime() - baujahr.getTime()) /yearInMillis ;

			return alter;
		}
```

so geschrieben und passt endlich, obwohl ich keine ahnung habe warum


```
public long getAlter() {
			
			Date now = new Date();
			long yearInMillis = 365 * 24 * 60 * 60  * 1000;
			long alter =   (now.getTime() - baujahr.getTime()) /365/24/60/60/1000 ;

			return alter;
		}
```


----------



## noobadix (29. Okt 2010)

Du solltest dir die Datentypen näher anschauen, welcher was kann und was nicht, denn long kann keine Nachkommastellen speichern (3/2 würde 1 ergeben). Wenn die Methode das Alter als long zurückgeben soll, ist es doch mit der Differenz getan?


----------



## nata (29. Okt 2010)

meinst du dass ich das als double spreichern sollte?warum hat es durch division von yearInMillis nicht geklappt?


----------



## noobadix (29. Okt 2010)

Was heißt "nicht geklappt"? Hm, weiß ich nicht. Jedenfalls teilst du in der unteren Methode nicht durch einen long.


----------



## nata (29. Okt 2010)

ja als ich durch yearInMillis dividiert habe hat mir 171 gegeben bei bestimmte fahrzeug, dann nach eine zeitlang habe ich so gemacht /1000/365/24/60/60 und hat mir 3 jahre gegeben


----------

