# Alter berechnen



## Gott1992 (19. Sep 2011)

Hey
ich habe einen String, der wie ein Datum ist ( tt.mm.yyyy )
Beispiel:

```
String Datum = "12.05.1990";
```

Wie kann ich mit einem einfachem Java Code das Alter (in Jahren, keine genauten Tage) berechnen ?


----------



## njans (19. Sep 2011)

```
String[] daten = Datum.split("\\.");

// Anschließend kannst du dann sowas machen:
int tag = Integer.parseInt(daten[0]);
int monat = Integer.parseInt(daten[1]);
int jahr =Integer.parseInt(daten[2]);
```

Also damit solltest du dann ohne Probleme eine Differenz zu dem aktuellen Datum hinbekommen


----------



## Marcinek (19. Sep 2011)

Indem man 2011 - 1990 macht. 

Das aktuelle Datum kann man sich mit dem Calendar holen. 

Wenn man dann noch den Monat vergleicht, kann man sehen ob vollendet oder nicht.

Gruß,

Martin


----------



## ARadauer (19. Sep 2011)

ungefähr...


```
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;


public class Test {
    
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy");
        String datumString = "12.05.1990"; 
        
        Date datum = df.parse(datumString);
        Date heute = new Date();
        long ms = heute.getTime()-datum.getTime();
        long sek= ms/1000;
        long min = sek/60;
        long std = min/60;
        long tage = std/24;
        long jahre = tage/365;
        System.out.println("jahre: "+jahre);
    }

}
```


----------



## turtle (19. Sep 2011)

Oder so:

```
private int diffYears(Date dtStart, Date dtEnd) {
		GregorianCalendar calStart = new GregorianCalendar();
		GregorianCalendar calEnd = new GregorianCalendar();
		calStart.setTime(dtStart);
		calEnd.setTime(dtEnd);
		int compareTo = calEnd.compareTo(calStart);
		if (compareTo < 0) {
			return -diffYears(dtEnd, dtStart);
		}
		int y0 = calStart.get(java.util.Calendar.YEAR);
		int y1 = calEnd.get(java.util.Calendar.YEAR);
		int years = y1 - y0;
		calStart.add(Calendar.YEAR, years);
		compareTo = calEnd.compareTo(calStart);
		if (compareTo < 0) {
			return years - 1;
		} else {
			return years;
		}
	}
```


----------



## dehlen (19. Sep 2011)

Oder wie njans vorgeschlagen hat:

```
import java.io.*;

public class Alter {
public static void main(String[] args) {
System.out.println("Datum eingeben in dd.MM.yyyy Format");
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
try {
String datum = input.readLine();
String[] daten = datum.split("\\.");
 
int tag = Integer.parseInt(daten[0]);
int monat = Integer.parseInt(daten[1]);
int jahr =Integer.parseInt(daten[2]);

int alter = 2011 - jahr;
System.out.println("Du bist "+alter+" Jahre alt");
}
catch(IOException e) {
e.printStackTrace();
}

}
}
```

Wobei hier natürlich nicht geprüft wird ob man schon bereits Geburtstag hatte oder nicht, außerdem könnte man bei dieser Ausführung auch den 40.40.2030 angeben.... aber das sind ja dann nur noch Schönheitskorrekturen


----------



## nrg (19. Sep 2011)

oder so:

```
public static int getAge(int day, int month, int year) {
		Calendar now = Calendar.getInstance();
		int currentMonth = now.get(Calendar.MONTH)+1;
		int possibleAge = now.get(Calendar.YEAR) - year;
		return currentMonth < month || (currentMonth == month && now.get(Calendar.DATE) < day)
				? possibleAge-1
				: possibleAge;
	}
```

month ist dabei 1-based


----------



## Cola_Colin (19. Sep 2011)

dehlen hat gesagt.:


> Oder wie njans vorgeschlagen hat:
> 
> ```
> import java.io.*;
> ...



Nächstes Jahr wird das Programm bei deiner Umsetzung aber falsche Ergebnisse liefern.


----------



## dehlen (19. Sep 2011)

das stimmt wohl, war aber ja auch nur die Aussage von njans und Marcinek in Code gefasst...


----------



## ocoal (19. Sep 2011)

Hallo auch,

es gibt zudem noch den (wirklich komfortablen) Weg mit der Joda-Time Library.


```
DateTime birth = DateTime.parse("12.05.1981", DateTimeFormat.forPattern("dd.MM.yyyy"));
int age = new DateTime().year().get() - birth.year().get();
```

Voilá 

-Colin-


----------

