Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Alter berechnen! (https://www.delphipraxis.net/125575-alter-berechnen.html)

thiagojonas 8. Dez 2008 18:48


Alter berechnen!
 
Hallo,
ich habe da mal wieder ein kleines problem...

Ich habe eine DateTimePicker und zwei variablen

datum:string;
datum := DateToStr(Now);

time:string;
time := DateToStr(DateTimePicker.Date);

Ich möchte jetzt sozusagen datum - time berechnen und dann das "alter" anzeigen lassen, z.B. über ShowMessage.

Wie folgt bin ich vorgegangen.

Delphi-Quellcode:
procedure TForm7.datum_dateChange(Sender: TObject);
var alter:extended;
begin
  time := DateToStr(datum_date.Date);
  alter := StrToDate(datum) - StrToDate(time);
  if (alter) >= 18 then
begin
  Tabsheet4.TabVisible := true;
  end
else
  if (alter) < 18 then
begin
  Tabsheet4.TabVisible := false;
  end;
end;
Funktioniert irgendwie nicht ganz.
Wenn das augewählte Datum 1995, dann wir der Tabsheet nicht auf false gesetzt :gruebel:
Woran liegt das?

haentschman 8. Dez 2008 19:00

Re: Alter berechnen!
 
Hallo...

probier mal folgendes:

Delphi-Quellcode:
if (alter) < 18 then
...weglassen, wenn das Programm in den else Zweig läuft ist alter eh < 18
aus...
Delphi-Quellcode:
if (alter) >= 18 then
machst du mal...
Delphi-Quellcode:
if alter >= 18 then
:hi:

thiagojonas 8. Dez 2008 19:07

Re: Alter berechnen!
 
Hmm... habe ich gemacht, geht aber nicht.
Liegt das vielleicht am OnChange des TimeDatePickers?

Michael Habbe 8. Dez 2008 19:10

Re: Alter berechnen!
 
Zitat:

Zitat von thiagojonas
Hallo,
ich habe da mal wieder ein kleines problem...

Ich habe eine DateTimePicker und zwei variablen

datum:string;
datum := DateToStr(Now);

time:string;
time := DateToStr(DateTimePicker.Date);

Ich möchte jetzt sozusagen datum - time berechnen und dann das "alter" anzeigen lassen, z.B. über ShowMessage.

Wie folgt bin ich vorgegangen.

Delphi-Quellcode:
procedure TForm7.datum_dateChange(Sender: TObject);
var alter:extended;
begin
  time := DateToStr(datum_date.Date);
  alter := StrToDate(datum) - StrToDate(time);
  if (alter) >= 18 then
begin
  Tabsheet4.TabVisible := true;
  end
else
  if (alter) < 18 then
begin
  Tabsheet4.TabVisible := false;
  end;
end;
Funktioniert irgendwie nicht ganz.
Wenn das augewählte Datum 1995, dann wir der Tabsheet nicht auf false gesetzt :gruebel:
Woran liegt das?

Ich frage mich, warum Du das Datum und die Zeit erst in einen String verwandelst. Beim Hin- und Herwandeln wird wohl eine Rundungsungenauigkeit eintreten. TDateTime ist vom Typ Double, Du hast aber Extended verwendet.
Du kannst doch direkt damit rechnen:

Delphi-Quellcode:
procedure TForm7.datum_dateChange(Sender: TObject);
var
  alter: TDateTime;
begin
  alter := now - datum_date.Date;
  if alter >= 18 then
    Tabsheet4.TabVisible := true
  else
    Tabsheet4.TabVisible := false;
end;
So sollte es klappen.

Gruß
Michael

haentschman 8. Dez 2008 19:11

Re: Alter berechnen!
 
nimm mal einen anderen Variablennamen für time.
...könnte mit dem reserviertem Wort Time verwechselt werden. Und dann stimmt deine Berechnung nicht.

Hawkeye219 8. Dez 2008 19:15

Re: Alter berechnen!
 
Hallo,

bei TDateTime-Werten gibt die Zahl vor dem Komma die Tage und nicht die Jahre an.

Hast du dir schon einmal die Unit DateUtils und deren Routinen angesehen?

Gruß Hawkeye

Michael Habbe 8. Dez 2008 19:18

Re: Alter berechnen!
 
Stimmt, mal nachgebessert :stupid: :angel2:

Zitat:

Zitat von Michael Habbe
Delphi-Quellcode:
procedure TForm7.datum_dateChange(Sender: TObject);
var
  alter: TDateTime;
begin
  alter := (now - datum_date.Date) / 365; // mal ohne Berücksichtigung der Schaltjahre
  if alter >= 18 then
    Tabsheet4.TabVisible := true
  else
    Tabsheet4.TabVisible := false;
end;


thiagojonas 8. Dez 2008 19:21

Re: Alter berechnen!
 
Ich habe mir das jetzt mal anzeigen lassen. Das Problem ist, dass wenn ich ich z.B. den 4.11.1990 aus wähle, dann zeigt Delphi mir über Showmessage den 4.11.1917 an. Woran liegt das?

haentschman 8. Dez 2008 19:24

Re: Alter berechnen!
 
Zitat:

Ich habe mir das jetzt mal anzeigen lassen.
was hast du dir anzeigen lassen ?

thiagojonas 8. Dez 2008 19:24

Re: Alter berechnen!
 
showmessage(datetostr(alter));

haentschman 8. Dez 2008 19:26

Re: Alter berechnen!
 
alter ist ja die Differenz aus Heute und gewähltem Datum (in Tagen oder /365 in Jahren)...und das wieder in ein Datum zurück ab dem Datum Nullpunkt ( :oops: hab ich vergessen :? ) ergibt dann manche lustige Kombination.

der Nullpunkt wäre showmessage(datetostr(0))...laß es dir mal anzeigen.

Michael Habbe 8. Dez 2008 19:26

Re: Alter berechnen!
 
Zitat:

Zitat von thiagojonas
showmessage(datetostr(alter));

Und wie bist Du an "alter" gekommen?!?



Mein Vorredner war schneller.

Heute 4.11.2008 - 4.11.1990 sind 18 Jahre.
Ab dem 31.12.1899 (der Nullpunkt) wäre es dann der 4.11.1917.

thiagojonas 8. Dez 2008 19:30

Re: Alter berechnen!
 
Zitat:

Zitat von Michael Habbe
Zitat:

Zitat von thiagojonas
showmessage(datetostr(alter));

Und wie bist Du an "alter" gekommen?!?

Steht in der oberen Threads.

thiagojonas 8. Dez 2008 19:31

Re: Alter berechnen!
 
Zitat:

Zitat von haentschman
alter ist ja die Differenz aus Heute und gewähltem Datum (in Tagen oder /365 in Jahren)...und das wieder in ein Datum zurück ab dem Datum Nullpunkt ( :oops: hab ich vergessen :? ) ergibt dann manche lustige Kombination.

der Nullpunkt wäre showmessage(datetostr(0))...laß es dir mal anzeigen.

Habe ich, kommt irgenetwas mit 1899 raus, beim ausgewählten Datum 8.12.2008 :gruebel:

Michael Habbe 8. Dez 2008 19:33

Re: Alter berechnen!
 
Aber warum willst Du Dir eigentlich die Differenz als Datum anzeigen lassen? :gruebel:
Mach doch einfach ShowMessage(FloatToStr(alter)), dann siehst Du doch die Jahre.

haentschman 8. Dez 2008 19:38

Re: Alter berechnen!
 
ok...vom Anfang
Zitat:

Habe ich, kommt irgenetwas mit 1899 raus,
...nämlich genau 31.12.1899 (siehe Post #12)

das Date ist eine Zahl entsprechend der Differenz vom 31.12.1899 zu dem gewähltem Datum. Darum kannst du auch mit Datumswerten rechnen. Mit "10.10.2007 - 09.09.2009" würde das nämlich nicht funktionieren.

d.h. der Computer speichert ein Datum immer als Differenz zum "Nullpunkt"

thiagojonas 8. Dez 2008 19:42

Re: Alter berechnen!
 
Okay habe ich verstanden.
Aber was muss ich den tun, damit ich das Alter berechnen kann?
denn 8.12.2008 - 8.12.2008 und ShowMessage(FloatToStr(alter)) kommt bei mir 4 raus.

haentschman 8. Dez 2008 19:44

Re: Alter berechnen!
 
Zitat:

denn 8.12.2008 - 8.12.2008 und ShowMessage(FloatToStr(alter)) kommt bei mir 4 raus.
:wiejetzt:

Michael Habbe 8. Dez 2008 19:45

Re: Alter berechnen!
 
Zitat:

Zitat von thiagojonas
Okay habe ich verstanden.
Aber was muss ich den tun, damit ich das Alter berechnen kann?
denn 8.12.2008 - 8.12.2008 und ShowMessage(FloatToStr(alter)) kommt bei mir 4 raus.

Vielleicht zuerstmal die Hilfe zum TDateTime-Typ studieren.
Damit hast Du dann das Hintergrundwissen, um damit zu rechnen.

Zitat:

Zitat von Delphi Help System
TDateTime Typ

TDateTime repräsentiert einen Datums-/Zeitwert in der Sprache Delphi.

Unit
System

Syntax


[Delphi] type TDateTime = TDateTime;


Beschreibung
In Delphi entspricht der Typ TDateTime einem Double-Wert. Der Delphi-Typ TDateTime entspricht der Klasse TDateTime von C++.
Der ganzzahlige Teil eines TDateTime-Wertes von Delphi entspricht der Anzahl der Tage seit dem 30.12.1899. Der fraktionale Teil des TDateTime-Wertes gibt die Tageszeit an.
Es folgen einige Beispiele für TDateTime-Werte und die entsprechenden Datums- und Zeitangaben:
0
30.12.1899 12.00 Uhr

2.75
1.1.1900 18.00 Uhr

-1.25
29.12.1899 6.00 Uhr

35065
1.1.1996 12:00 am


Wenn beide TDateTime-Werte positiv sind, brauchen Sie zur Ermittlung der Tage zwischen zwei Datumsangaben die beiden Werte nur voneinander zu subtrahieren. Um eine Datums-/Zeitangabe um eine bestimmte Anzahl von Tagen zu erhöhen, addieren Sie einfach die Anzahl zu dem TDateTime-Wert hinzu.
Wenn Sie mit negativen TDateTime-Werten arbeiten, muss der Zeitanteil separat berechnet werden. Der Zeitanteil gibt den Bruchteil eines 24-Stundentages ohne Berücksichtigung des Vorzeichens des TDateTime-Wertes wieder. 6:00 am 29.12.1899 ist –1,25, nicht –1 + 0,25, was –0,75 ergäbe. Zwischen – 1 und 0 gibt es keine TDateTime-Werte.
Hinweis:
In Delphi 1.0 wurde das Datum vom Jahr 1 und nicht von 1899 an errechnet. Um ein Delphi 1.0-Datum in einen TDateTime-Wert einer neueren Delphi-Version zu konvertieren, subtrahieren Sie vom Delphi 1.0-Datum den Wert 693594,0.


roga 8. Dez 2008 19:47

Re: Alter berechnen!
 
Delphi-Quellcode:
Alter := YearsBetween(Geburtsdatum, Now);

haentschman 8. Dez 2008 19:49

Re: Alter berechnen!
 
...ist doch viel zu leicht :wink:
...man soll doch etwas lernen :thumb:

thiagojonas 8. Dez 2008 19:55

Re: Alter berechnen!
 
Zitat:

Zitat von roga
Delphi-Quellcode:
Alter := YearsBetween(Geburtsdatum, Now);

Komisch das YearsBetween ist bei mir undeklariert.

haentschman 8. Dez 2008 19:57

Re: Alter berechnen!
 
Zitat:

Unit
DateUtils

Syntax


[Delphi] function YearsBetween(const ANow: TDateTime; const AThen: TDateTime): Integer;


Beschreibung
Mit YearsBetween können Sie die Differenz zwischen zwei TDateTime-Werten in Jahren ermitteln. Da nicht alle Jahre dieselbe Länge aufweisen (Schaltjahre), gibt YearsBetween eine Näherung zurück, die auf einem Wert von 365,25 Tagen pro Jahr basiert. Es werden nur vollständige Jahre gezählt. Deshalb meldet YearsBetween beispielsweise die Differenz zwischen dem 1. Januar und dem 31. Dezember mit 0, wenn kein Schaltjahr vorliegt. Bei Schaltjahren wird dagegen der Wert 1 zurückgegeben.
DateUtils in uses einbinden :thumb:

thiagojonas 8. Dez 2008 20:04

Re: Alter berechnen!
 
Ahh... Super klasse :cheers:

also für alle die das gleiche Problem haben :-D

Delphi-Quellcode:
uses DateUtils...

procedure TForm7.datum_dateChange(Sender: TObject);
var alter: extended;
begin
  alter := YearsBetween(datum_date.Date, Now);
  if alter >= 18 then
begin
    Tabsheet4.TabVisible := true
end
  else
  if alter < 18 then
    Tabsheet4.TabVisible := false;
end;

haentschman 8. Dez 2008 20:06

Re: Alter berechnen!
 
Delphi-Quellcode:
if alter < 18 then
...ist im else Zweig immer True...damit kannst du es weglassen.

smallsmoker 8. Dez 2008 20:58

Re: Alter berechnen!
 
[ot]
Zitat:

Zitat von haentschman
Hallo...

probier mal folgendes:

Delphi-Quellcode:
if (alter) < 18 then
...weglassen, wenn das Programm in den else Zweig läuft ist alter eh < 18
aus...
Delphi-Quellcode:
if (alter) >= 18 then
machst du mal...
Delphi-Quellcode:
if alter >= 18 then
:hi:

sry das ich "soweit" nach oben greife ... :) aber du kannst auch

statt
Delphi-Quellcode:
if alter >= 18 then
Delphi-Quellcode:
if (alter >= 18) then
schreiben dann bekommst du nich so nen schock (so wie ich :D ) wenn du mal was mit java zu tuhen haben solltest
[/ot]

DeddyH 9. Dez 2008 08:41

Re: Alter berechnen!
 
Zitat:

Delphi-Quellcode:
uses DateUtils...

procedure TForm7.datum_dateChange(Sender: TObject);
var alter: extended;
begin
  alter := YearsBetween(datum_date.Date, Now);
  if alter >= 18 then
begin
    Tabsheet4.TabVisible := true
end
  else
  if alter < 18 then
    Tabsheet4.TabVisible := false;
end;

Delphi-Quellcode:
procedure TForm7.datum_dateChange(Sender: TObject);
  Tabsheet4.TabVisible := YearsBetween(datum_date.Date, Now) >= 18;
end;
In der Kürze liegt die Würze ;)

hitzi 9. Dez 2008 12:01

Re: Alter berechnen!
 
Sieh dir mal YearsBetween, MonthsBetween und DaysBetween aus der Unit DateUtils an.

[EDIT] Oops ... wo kommt die zweite Seite her??? Hehe ... sorry :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz