Berechnung des aktuellen Alters auf Basis des Geburtstags

Status
Nicht offen für weitere Antworten.

jdlbgwd

Mitglied
Hallo liebe Java Profis,

ich habe eine kleines Problem und komme damit überhaupt nicht klar, da ich noch in den Kinderschuhen bei der Javaprogrammierung stecke.

Ich möchte bei Aufruf einer Mitgliederseite das aktuelle Alter ausgeben, auf Basis des Geburtstages und eben nicht das Geburtsdatum anzeigen.

Wer hat das schon einmal realisiert und kann mir da helfen oder gar den source code zur verfügung stellen ?

Vielen Dank
Jörg
 
Erstens

Zweitens

Drittens

Runden auf ganze Jahre -> Vorher bei beiden Daten 1. Januar 0 Uhr 0 Minuten setzen
oder sonst etwas cleveres ausdenken (falls es um Geburtstage und Lebensalter geht ist der 1. Januar nicht die richtige Idee)
 
Danke für die Belehrung und den Kommentar über Komma und Groß- Kleinschreibung.

War eine super Schweizer Hilfe !
 
Was für eine triefende Ironie wegen meiner Signatur - du hast ja keinen besonderen Grund dich betroffen zu fühlen. Wenn du in diesem und anderen Foren die Texte die so getippt werden ein wenig verfolgst, verstehst du sicher warum ich genau die benutze.

Antworten auf deine Fragen findest du über die google Links mehr als genug.
Solange du nicht signalisierst, dass du selbst schon nachgedacht hast wie das Problem zu lösen sein könnte und das vielleicht mit ein wenig selbstgeschriebendem Code untermauerst, wird kaum eine andere Art von Antworten kommen.
 
Ich denke, gerade ein Schweizer sollte sich nicht über die Deutsche Sprache auslassen.
Und ausserdem ist es heute fast üblich geworden, u. a. auch wegen der Schnelligkeit beim Tippen, in Foren oder überhaupt in der elektronischen Nachrichtenübermittlung nur noch klein zu schreiben.

Und nur so zur Information, ich habe bereits mehrere Stunden mit Nachlesen und Selbststudium damit zugebracht. Nur ich mache dies ehrenhalber und nicht beruflich.
 
Was hast du denn bereits?

Andi hat seine Signatur schon länger so, kein Grund dass du das persönlich nimmst.

Bist du sicher dass du diesmal wirklich Java meinst und nicht wieder JavaScript?
 
Nur ich mache dies ehrenhalber und nicht beruflich.
bemerkenswerte Bemerkung nebenbei,
von deiner Seite natürlich absolut unnachprüfbar, nicht dass es eine große Rolle spielen würde,

für alle die dir hier antworten gilt das in Bezug auf die Antworten sowieso und zu 100% glaubhaft,
denn wer sollte das hier bezahlen? 😉
 
Die Sachen in Klammern sind Pseudocode.

1. Hole dir das Datum (.getDate(); )
2. Verwandle das in einem String (.toString(); )
3. Schneide alle Stéllen, bis auf das Jahr weg (.substring(0,x); )
4. Hole dir das Jahr der Geburt(.getText(); )
5. JahrVonJetzt - Jahr der Geburt= Alter
6. Schreibe das Alter(.setText(); )

Andi_CH hat schon wirklich lange diese Signatur.

Code:
Ich denke, gerade ein Schweizer sollte sich nicht über die Deutsche Sprache auslassen.

Wenn du wirklich etwas gegen seine Signatur hast, schreibe ihn eine private Nachricht(Account), wo du deine Argumente hervorbringt, bitte noch in wohl artikulierten Ton.
 
Zuletzt bearbeitet:
vorallem funktioniert es so einfach nicht. man muss schon die monate und tage mit berücksichtigen, weil halt nicht jeder beim jahreswechsel sofort ein jahr älter wird 😉
 
Date ist doch ein ganzes Datum, wieso nur die Jahre?
durch die berühmten Schaltjahre wirds vielleicht ein Tag zuwenig/zuviel oder ein Tag pro 4 Jahre (mit 40 schon 10 Tage) wenn man einfach nur durch 365 Tage teilt,
wovon auch immer man ausgeht, mit Calendar-Methoden nicht ganz so kritisch
 
da datums-arithmetik alles andere als trivial ist, kann man den TO doch ein wenig unter die Arme greifen?

hier ein kleiner, schneller -aber auch "falscher" Lösungsansatz-
zu beachten sei: Die Monate beginnen bei 0 zu zählen und enden demensprechend bei 11 = Dezember!

Personen, die noch kein ganzes Jahr alt sind...werden trotzdem mit 1 Jahr angegeben!!!


Java:
import java.util.Calendar;
import java.util.GregorianCalendar;

public class Geburstag {

	private Calendar cal;

	public Geburstag(int jahr, int monat, int tag) {
		cal = new GregorianCalendar();
		cal.add(Calendar.YEAR, -jahr);
		cal.add(Calendar.MONTH, -monat);
		cal.add(Calendar.DAY_OF_MONTH, -tag);
		System.out.println("Sie sind " + cal.get(Calendar.YEAR) + " Jahre, "
				+ cal.get(Calendar.MONTH) + " Monate und "
				+ cal.get(Calendar.DAY_OF_MONTH) + " Tage alt.");
	}

	public static void main(String[] args) {
		new Geburstag(1999, 6, 3);//richtig
		new Geburstag(2011, 5, 3);//falsch
		new Geburstag(2010, 5, 3);//richtig
		new Geburstag(2010, 11, 3);//falsch
		new Geburstag(2009, 11, 3);//richtig
	}
}

Ausgabe:
[XML]Sie sind 11 Jahre, 11 Monate und 3 Tage alt.
Sie sind 1 Jahre, 0 Monate und 3 Tage alt.
Sie sind 1 Jahre, 0 Monate und 3 Tage alt.
Sie sind 1 Jahre, 6 Monate und 3 Tage alt.
Sie sind 1 Jahre, 6 Monate und 3 Tage alt.[/XML]
 
Mit Joda Time krieg ich...
Code:
Sie sind 11 Jahre, 12 Monate und 3 Tage alt.
Sie sind 0 Jahre, 1 Monate und 3 Tage alt.
Sie sind 1 Jahre, 1 Monate und 3 Tage alt.
Sie sind 0 Jahre, 7 Monate und 3 Tage alt.
Sie sind 1 Jahre, 7 Monate und 3 Tage alt.
 
Sie sind 11 Jahre, 12 Monate und 3 Tage alt.

also...Joda macht auch Mist 😉
und die 1-Monatsdifferenz resultiert wahrscheinlich daraus, dass Joda mit 1= Januar rechnet.

aber grundsätzlich ist mein Lösungsansatz verkehrt. Mit ein paar kleinen Work-arounds würde sich dann auch mit der Java-Standardbinliothek dieses Problemchen lösen lassen.
 
Ow ja, da hab ich was nicht richtig erkannt. Wenn man lediglich den Monat mit 1 subtrahiert, läufts --> man befindet sich von der Diff her im Monat "Dez", also im 12. Monat, dies ist aber bereits nach 11 und nicht 12 Monaten der fall. Aber da der Monat so oder so irrelevant ist (bzw. sein sollte)... Wenn ich das -1 mitrechne, dann stimmt eigentlich jeder Output.
Also kann ich mit weniger Code etwas schreiben, das mit GregorianCalendar nicht funktioniert!?
Java:
public int getAge(int jahr, int monat, int tag) {
    return getAge(new DateTime(jahr, monat, tag, 0, 0, 0, 0));
}

public int getAge(final DateTime birthday) {
    DateTime now = new DateTime();
    return now.minusYears(birthday.getYear()).minusMonths(birthday.getMonthOfYear()).minusDays(
            birthday.getDayOfMonth()).getYear();
}
 
ja und? mit JFrame kann man in einer Zeile schreiben was ohne JFrame (und andere fertige APIs) 100.000 Zeilen Code braucht..,

wobei Calendar eben die Jahre 1 vor Christus, 1 nach Christus usw. zählt,
wenn deine Joda-Zeit eine normale Zeitangabe und nicht speziell ein Intervall sein soll, dann finde ich 0 Jahre dort bedenklich..
 
Interessante Entwicklung, bin immer noch der Meinung das der TS mal wieder JavaScript meinte und nicht Java...
 
auch wenn dein Joda-Calendar mit wenig Code eine annährend richtige Ausgabe gibt...eigentlich müsste man doch, um das korrekte Alter wiedergeben zu können den Zeitraum zwischen Geburt und heute in den Focus nehmen, und nicht bspw vom Jahr 2011, 2000 Jahre abziehen!?
Ansonsten betrachtet man einen Zeitraum vom Jahre 0 bis zum Jahr X (~alter), was eigentlich nicht richtig sein kann.

Aber maki hat schon recht...wahrscheinlich meint der TO wirklich JavaScript...aber dort sollten doch solche, oder ähnliche Funktionen schon vorhanden sein...
 
wie wärs einfach unixtimestamp von jetzt - unixtimestamp von damals ? denn hat man das in s glaub ich denn /(60*60*24*365) und schon sollte man die jahres differenz haben

code für aktuellen timestamp
Java:
long timestamp = System.currentTimeMillis()/1000
 
naja da wären wir wieder bei den schaltjahren...

so könnte man es evtl noch machen:
Java:
	public static int getAge(int day, int month, int year) {
		String[] a = new SimpleDateFormat("dd.MM.yyyy").format(new Date()).split("\\.");
		int age = Integer.parseInt(a[2]) - year;
		return month >= Integer.parseInt(a[1]) && day > Integer.parseInt(a[0]) ? age - 1 : age;
	}
 
Ja, da gibts [c]Duration[/c] u.ä. in Joda Time. Musste noch nie damit arbeiten, also kann ich auch nichts genaueres dazu aussagen. Gibts da auch was vergleichbares in der Std API?
Aber das GregorianCalender kein Jahr 0 - Joda Time aber schon - kennt, finde ich etwas komisch.
 
Müsste man dann nicht sowieso noch die Umstellung zwischen gregorianischen und julianischen Kalender im Oktober 1582 beachten?
 
Java:
cal = new GregorianCalendar();
System.out.println("Heute ist der " + cal.get(Calendar.YEAR) + "-" + cal.get(Calendar.MONTH) + "-" + cal.get(Calendar.DAY_OF_MONTH));

Ausgabe: 2011-5-6 na ja - dass das allenfalls subobtimal ist brauch ich ja wohl nicht zu betonen. Die ganze Gregorianische Welt zählt anders

Anmerkung "heute" ist der 6. Juni 2011 - kann ja sein, dass das jemand erst in 11 Monaten liest 🙂

hm und weitere mehr als eigenartige Efekte gibt es auch:
Java:
cal = new GregorianCalendar();
cal.add(Calendar.YEAR, -cal.get(Calendar.YEAR));
sysout(jahr);// ist ja klar was gmeint ist

Ausgabe 1 ???:L ???:L ???:L
 
Zuletzt bearbeitet:
das haben wir jetzt schon ein paar mal gehört... java ist halt allgemein zero-based. das bei monaten auch so handzuhaben halte ich aber zugegeben auch für etwas unpassend aber wenn man es weiß, ist das doch halb so wild...
 
Sicheres Auftreten bei völliger Ahnungslosigkeit

hi hi - find ich immer speziell 🙂 Weisst du denn überhaupt was du von dir gibst 😀
Ist schon klar - ich hab ja auch "suboptimal" geschrieben.

Das was ich noch dazu editiert habe ist aber wohl schwieriger zu begreifen.
 
Haben heute alle zu heiss??? Erst der, der sich über meine uralte Signatur aufregt und jetzt noch das. Zum Glück bin ich heute gutmütig gesinnt, aber ich kann auch kleinlich tun. Deines war der 31. Post - 20 gibt 11 das war der da

Kleinlichkeit weg - ich finde wirklich im ganzen Tread keinen Hinweis darauf warum 2011 - 2011 = 1 geben soll.
 
Haben heute alle zu heiss???
zum Glück diesmal ich nicht alleine 😉
Kleinlichkeit weg - ich finde wirklich im ganzen Tread keinen Hinweis darauf warum 2011 - 2011 = 1 geben soll.

http://www.java-forum.org/java-basi...llen-alters-basis-geburtstags.html#post770432
Personen, die noch kein ganzes Jahr alt sind...werden trotzdem mit 1 Jahr angegeben!!!
und dann gehts danach bald weiter
 
ich finde wirklich im ganzen Tread keinen Hinweis darauf warum 2011 - 2011 = 1 geben soll.
weil es kein Jahr 0 gibt...zumindest nach der Impementation des java.util.GregorianCalendar
Java:
public static void main(String[] args) {
		Calendar cal = new GregorianCalendar();
		cal.set(Calendar.YEAR, 1);
		cal.set(Calendar.ERA, 0);
		cal.set(Calendar.MONTH, 11);
		cal.set(Calendar.DAY_OF_MONTH, 29);
		SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
		for (int i = 0; i < 5; i++) {
			System.out.println();
			cal.add(Calendar.DAY_OF_MONTH, 1);
			System.out.print(cal.getTime()+"\t"
					+ sdf.format(cal.getTime())
					+ ((cal.get(Calendar.ERA) == 1) ? " AD|nach Christus"
							: " BC|vor Christus"));
		}

	}

[XML]Thu Dec 30 16:55:51 CET 1 30.12.0001 BC|vor Christus
Fri Dec 31 16:55:51 CET 1 31.12.0001 BC|vor Christus
Sat Jan 01 16:55:51 CET 1 01.01.0001 AD|nach Christus
Sun Jan 02 16:55:51 CET 1 02.01.0001 AD|nach Christus
Mon Jan 03 16:55:51 CET 1 03.01.0001 AD|nach Christus[/XML]
 
Ich war heute Nachmittag nicht online und so habe ich erst jetzt die ganzen Kommentare dazu gelesen.

Also in JavaScript habe ich es nicht hinbekommen und bin davon ausgegangen, dass man dies, gerade in Bezug auf die Schaltjahre, auch in JavaScript nicht machen kann.

Daher wollte ich es in Java schreiben. Das zu dem Thema ob ich Script meinte oder nicht.

Nun zu den ganzen anderen Bemerkungen, mir ist es egal wie lange einer eine Signatur hat, wenn Sie ein wenig mehr als daneben ist. Dann bekommt er eben eine passende Antwort dazu.

Ebenso die dummen Bemerkungen dazu, ob man das glauben soll oder nicht, dass ich dies nur nebenbei mache. Wenn ich das beruflich machen würde und dann dies nicht hinbekomme, dann sollte ich mir mein Geld zurück geben lassen und einen neuen Job suchen. Alleine aus der Tatsache heraus solltewohl klar sein, dass ich hier wirklich nur eine Lösung für einen kleinen Verein suche.

Aber ich will hier keine weitere hitzige Diskussion auslösen und sage Danke und hoffe jeder hat etwas durch die Diskussion des Lösungweges dazu gelernt.

Ich weniger, da ich ehrlich nur die Hälfte verstanden habe. Verdiene mein Geld nunmal mit anderen Dingen und so wird es auch bleiben.

Ich werde das jetzt eben bezahlen und programmieren lassen.

MfG
Jörg
 
So alt sind allerdings die wenigstens User.

Meinte ich nur, weil es vorhin auch irgendwie ums Jahr 0 ging.

Eben dieses Umrechnen zwischen JK und GK, Berechnung des Wochentages und die Berechnung zwischen zwei Daten (mittels modifiziertes julianisches Datum(oder so ähnlich)) musste ich im letzten Semester implementieren.
 
Ich werde das jetzt eben bezahlen und programmieren lassen.

Hauptsache ein Bisschen rummotzen und alle interessanten Antworten ignorieren und im Nachhinein jemanden bezahlen? Geschieht dir ganz recht.
Es gibt hier bei genauerem Hinsehen eine Lösung, welche funktioniert und nur noch reinkopiert werden müsste. Bei einer solchen Antwort, hab ich aber überhaupt keine Lust, dir diese zu verraten - hoffentlich irgendwie verständlich...
 
in javascript könnte das so aussehen (ungetestet):


Code:
function getAge(birthdate) {
	var now = new Date();
	var age = now.getFullYear() - birthdate.getFullYear();
	return birthdate.getMonth() >= now.getMonth() && birthdate.getDate() > now.getDate() ? age - 1 : age;
}
 
Hauptsache ein Bisschen rummotzen und alle interessanten Antworten ignorieren und im Nachhinein jemanden bezahlen? Geschieht dir ganz recht.
Es gibt hier bei genauerem Hinsehen eine Lösung, welche funktioniert und nur noch reinkopiert werden müsste. Bei einer solchen Antwort, hab ich aber überhaupt keine Lust, dir diese zu verraten - hoffentlich irgendwie verständlich...

Ersten habe ich nicht rumgemotzt, ich habe eine sehr kritische Bemerkung zu einer Signatur gemacht, sorry das ich Signaturen die in Nachrichten an mich stehen noch lese und diese auch auf mich beziehe.

Ich ignoriere garnichts, scheinbar liest Du nicht alles was ich geschrieben habe. Ich habe sehr wohl alles durchgelesen und auch versucht die Zusammenhänge in Java nachzuvollziehen, aber auch ehrlich geschrieben, dass ich nur die Hälfte verstanden habe. Demnach kann ich KEINE Lösung zum hineinkopieren gefunden haben.

Du solltest erst überlegen und dann schreiben !

Und nun Ende mit diesem Thread.
 
sorry das ich Signaturen die in Nachrichten an mich stehen noch lese und diese auch auf mich beziehe.
ich würde nicht alles in einem forum persönlich nehmen und vorallem nicht die signaturen 🙂

Demnach kann ich KEINE Lösung zum hineinkopieren gefunden haben.
demnach hast du nicht richtig gelesen. jetzt haste auch ne Lösung in JS, obwohl das absolut nichts in Java Basics zu suchen hat (ob sie funktioniert, ist die zweite frage 😉)
 
Zuletzt bearbeitet:
Ich war heute Nachmittag nicht online und so habe ich erst jetzt die ganzen Kommentare dazu gelesen.

Also in JavaScript habe ich es nicht hinbekommen und bin davon ausgegangen, dass man dies, gerade in Bezug auf die Schaltjahre, auch in JavaScript nicht machen kann.

Daher wollte ich es in Java schreiben. Das zu dem Thema ob ich Script meinte oder nicht.

Nun zu den ganzen anderen Bemerkungen, mir ist es egal wie lange einer eine Signatur hat, wenn Sie ein wenig mehr als daneben ist. Dann bekommt er eben eine passende Antwort dazu.

Ebenso die dummen Bemerkungen dazu, ob man das glauben soll oder nicht, dass ich dies nur nebenbei mache. Wenn ich das beruflich machen würde und dann dies nicht hinbekomme, dann sollte ich mir mein Geld zurück geben lassen und einen neuen Job suchen. Alleine aus der Tatsache heraus solltewohl klar sein, dass ich hier wirklich nur eine Lösung für einen kleinen Verein suche.

Aber ich will hier keine weitere hitzige Diskussion auslösen und sage Danke und hoffe jeder hat etwas durch die Diskussion des Lösungweges dazu gelernt.

Ich weniger, da ich ehrlich nur die Hälfte verstanden habe. Verdiene mein Geld nunmal mit anderen Dingen und so wird es auch bleiben.

Ich werde das jetzt eben bezahlen und programmieren lassen.

MfG
Jörg


Genial, nicht den Unterschied zwischen Java und Javascript kennen - und sich auch nicht mal informieren-, aber den schluß,ziehen, wenns mit Javascript nicht geht, dann mit Java.
Und wo lassen wir dann das Java ablaufen?? Im Apache Webserver bei dem 0 EUR Hoster...

Wir funktioniert das heutzutage?
Wer einen Computer hat ist automatisch Hardware-Spezialist?
Wer einen Internetzugang hat ist automatisch Internetprogrammierer?
 
Kein Thread dieser Art ohne mich!!!!

Wenn ich das beruflich machen würde und dann dies nicht hinbekomme, dann sollte ich mir mein Geld zurück geben lassen und...

Du bezahlst dich selber fürs Labern?

Warum greifst du einen Schweizer an, der vernünftig schreiben kann? Du kannst es offensichtlich nicht.
 
Mein Code funktioniert, bis auf das Säuglinge, oder Babys unter einem Lebensjahr nicht korrekt angezeigt werden.

Dieser Code funktioniert auch, mit der Joda-Bibo...und sogar ein JS-Code hast du bekommen...und wir nichtmal ein Danke ;(
 
Ich ignoriere garnichts, scheinbar liest Du nicht alles was ich geschrieben habe. Ich habe sehr wohl alles durchgelesen und auch versucht die Zusammenhänge in Java nachzuvollziehen, aber auch ehrlich geschrieben, dass ich nur die Hälfte verstanden habe. Demnach kann ich KEINE Lösung zum hineinkopieren gefunden haben.

Wenn du aber etwas weniger Zeit für genervte Postings deiner- und andererseits aufwenden würdest, dann könntest du bei unklaren Codestücken uns fragen. Für das sind wir alle nämlich hier.
Auch wenn nrg's Code ohne eine schöne Methode (seitens API) funktioniert - dieser gibt immer das korrekte Ergebnis zurück. Dieser hat er sowohl für Java und JS gepostet.
 
So, da nun wirklich jeder seine Meinung sagen durfte, mach ich hier mal zu.

*geschlossen*
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben