Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Differenz von Datum1 und Datum2 (https://www.delphipraxis.net/140537-differenz-von-datum1-und-datum2.html)

yasR 20. Sep 2009 09:11


Differenz von Datum1 und Datum2
 
Sers
ich möchte die Differenz zwischen zwei Datum(s) herausfinden. (bsp. 01.01.09 und 30.01.09).
Die beiden Datum-Werte bekomme ich über ein Editfeld, das gewöhnlicherweise ein string ist.

Das hier ist mein (logischer) Lösungsansatz, der allerdings nicht funktioniert.



var datum1, datum2 : TDateTime;
tage : string;

datum1 := StrToDate(Edit1.Text);
datum2 := StrToDate(Edit2.Text);

tage := DateToStr(datum1-datum2);

Label1.Caption := 'Die Differenz zwischen Datum1 und Datum2 ist ' + tage + ' Tage';

Bitte um Hilfe 8)

Mit freundlichen Grüßen
yasR

alzaimar 20. Sep 2009 09:17

Re: Differenz von Datum1 und Datum2
 
Wieso sollte er auch funktionieren, wenn du die Differenz als Datum darstellst.
Ein Datum wird als Anzahl der Tage seit dem 1.1.1900 (oder dem 31.12.1899 ?) dargestellt. Der Nachkomma-Anteil beschreibt die Zeit (=0.5 = 12 Uhr Mittags). Ergo ist die Differenz dann dein Ergebnis, bzw. schon sehr nah drann.

Wenn Du nun wissen willst wieviel Tage zwischen zwei Daten, dann solltest du dir vorher überlegen, wie z.B. die Differenz zwischen de, 1.9, 23:59 und dem 2.9 00:01 gehandhabt werden soll. Obwohl nur 2 Minuten zwischen den Daten liegen, sind es ja unterschiedliche Tage.

mkinzler 20. Sep 2009 09:20

Re: Differenz von Datum1 und Datum2
 
Oder man sieht sich die Unit DateUtils mal an, darin gibt es verschiedenen Funktionen um Zeit/Datumsabstände zu berechnen.

Wolfgang Mix 20. Sep 2009 09:38

Re: Differenz von Datum1 und Datum2
 
Erstmal herzlich willkommen in der DP :dp:

Schau mal hier unter DateUtils hier

Gruß

Wolfgang

Chris.R 21. Sep 2009 10:08

Re: Differenz von Datum1 und Datum2
 
Hallo,

ich würds so lösen:

Delphi-Quellcode:
var datum1, datum2 : TDateTime;
tage : integer;

datum1 := StrToDate(Edit1.Text);
datum2 := StrToDate(Edit2.Text);

if datum1 > datum2 then
  tage := Trunc(datum1) - Trunc(datum2)
else
  tage := Trunc(datum2) - Trunc(datum1);

Label1.Caption := 'Die Differenz zwischen Datum1 und Datum2 ist ' + IntToStr(tage) + ' Tage';
Ciao Chris

DeddyH 21. Sep 2009 10:15

Re: Differenz von Datum1 und Datum2
 
Oder kürzer:
Delphi-Quellcode:
Label1.Caption := Format('Die Differenz zwischen Datum1 und Datum2 ist %d Tage',
                  [abs(trunc(StrToDate(Edit1.Text)) - trunc(StrToDate(Edit2.Text)))]);
Wobei dann auch die oben angesprochenen 2 Minuten als ganzer Tag gelten :mrgreen:

Wolfgang Mix 21. Sep 2009 13:57

Re: Differenz von Datum1 und Datum2
 
Noch kürzer geht es wirklich nicht :-)

Gruß

Wolfgang

Tyrael Y. 21. Sep 2009 14:05

Re: Differenz von Datum1 und Datum2
 
Zitat:

Zitat von Wolfgang Mix
Noch kürzer geht es wirklich nicht :-)

Gruß

Wolfgang

Doch :D

Delphi-Quellcode:
Label1.Caption := Format('Die Differenz zwischen Datum1 und Datum2 ist %d Tage',
                  [DaysBetween(StrToDate(Edit1.Text), StrToDate(Edit2.Text))]);

himitsu 21. Sep 2009 14:09

Re: Differenz von Datum1 und Datum2
 
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:

Das hier ist mein (logischer) Lösungsansatz, der allerdings nicht funktioniert.
WAS funktioniert nicht ... tut mir Leid, aber nur "funktioniert nicht" ist keine ausreichende Fehlerbeschreibung :!:

Allerdings könntest man da auch logischer Weise selber drauf kommen, was und warum es nicht geht.

> DateToString wandelt ein Datum im TDateTime-Format in einen String um

Du hast aber da kein Datum (Zeit seit einem bestimmten Tag, siehe OH), sondern eine Differenz (unterschied zwischen 2 Zeiten)

IntToStr + Trunc/Round, bzw. FloatToStr wären da passender.


PS: dat teil hatte ich mir zufällig vor 3-4 Stündchen gebastelt und aus langer Weile noch etwas "aufgemotzt" :angel2:

Sherlock 21. Sep 2009 14:14

Re: Differenz von Datum1 und Datum2
 
Und noch etwas:
Für die Eingabe von Datum/Uhrzeit verwendet man Delphi-Referenz durchsuchenTDateTimePicker.

Dann spart man sich die lästige Umwandelei.

Sherlock

himitsu 21. Sep 2009 14:21

Re: Differenz von Datum1 und Datum2
 
Zitat:

Zitat von Sherlock
Für die Eingabe von Datum/Uhrzeit verwendet man Delphi-Referenz durchsuchenTDateTimePicker.

siehe das, was ich grad noch angehangen hab

wollte vorhin eigentlich nur schnell eine Differenz für diesen Beitrag haben
http://www.delphipraxis.net/internal...081642#1081642

also schnell die DateTimePicker und ein Edit auf 'ne Form

dabei fiehl mir dann das noch auf
ShoutBox: himitsu - 11:43
vor etwa 40 Minuten bin ich 11033 Tage 11 Stunden 0 Minuten 33 Sekunden alt geworden :shock:

und weil ich das so witzig fand (zusammen mit der 11011 11:0:11 von Ende letzen Monat), hab ich's noch etwas "aufgemotzt" :freak:

Wolfgang Mix 21. Sep 2009 14:28

Re: Differenz von Datum1 und Datum2
 
@Sherlock

Stimmt, so hatte ich das auch 'mal gemacht.

Delphi-Quellcode:
Label1.Caption:=IntToStr(round(DateTimePicker1.Date-DateTimePicker2.Date);)
Da muß man aber wie blöde in den Kalendern navigieren.
Alternativ gäbe die SpinEdits. Ist wohl alles Geschmackssache.
Mir sind am liebsten nackte Funktionen.

Gruß

Eolfgang

Sherlock 21. Sep 2009 14:35

Re: Differenz von Datum1 und Datum2
 
@himitsu: Gratz!
@Wolfgang Mix: Man kann auch ein datum direkt eingeben. Der Vorteil dieser Komponente (abgesehen vom korrekten Datenformat) ist eben auch die eingebaute Plausibilitäts- und Formatprüfung.

Sherlock

Wolfgang Mix 21. Sep 2009 14:49

Re: Differenz von Datum1 und Datum2
 
@Sherlock:

Die Eingabe 15.10.1582 will mir im DateTimePicker nicht gelingen.
Monate kann ich nur über das Menü ändern.
Die Jahre kann ich gar nicht eingeben. Was mache ich falsch?
Proberty übersehen?
Gruß

Wolfgang

Sherlock 21. Sep 2009 15:06

Re: Differenz von Datum1 und Datum2
 
Wow!

In die Verlegenheit bin ich noch nie gekommen. Daten unserer Epoche funktionieren jedenfalls einwandfrei ;)

Aus der OH:
Zitat:

Das zugrundeliegende Windows-Steuerelement verhält sich unvorhersehbar, wenn ein Datumswert mit der Jahresangabe 1752 oder früher verwendet wird (das Jahr, in dem in englischsprachigen Ländern der Gregorianische Kalender eingeführt wurde).
Sherlock

Tyrael Y. 21. Sep 2009 15:12

Re: Differenz von Datum1 und Datum2
 
@Wolfgang Mix

Stell mal MaxDate und MinDate ein, dann kannst du auch ein Datum für das Jahr 1546 eingeben.
Das mit den Monaten nicht eingeben liegt wahrscheinlich daran, daß du einfach nur zB. eine 6 für Juni eingibst anstatt 06

edit:
Trotz minDate maxDate ist tatsächlich eine Jahreseingabe unter 1752 nicht möglich, konnte es nicht glauben und habe es grade mal geprüft.

Wolfgang Mix 21. Sep 2009 15:34

Re: Differenz von Datum1 und Datum2
 
Zitat:

Stell mal MaxDate und MinDate ein, dann kannst du auch ein Datum für das Jahr 1546 eingeben.
Habe ich gemacht. Es werden Werte von 01.01.9999 bis 31.12.9999 akzeptiert.
Eine Jahreseingabe wird nicht zugelassen. Das Jahresfeld ist für Eingaben disabled.
Selbst das Jahr 2000 kann ich nicht eingeben!
Wo ist der richtige Schalter?

Gruß

Wolfgang

Tyrael Y. 21. Sep 2009 15:44

Re: Differenz von Datum1 und Datum2
 
Du müsstest Jahreszahlen auch vierstellig eingeben.
Also Jahr 1 ist 0001.

Aber die Beschränkung mit Jahr kleiner 1752 besteht tatsächlich.

Wolfgang Mix 21. Sep 2009 15:50

Re: Differenz von Datum1 und Datum2
 
Ich zitiere mich selbst:
Zitat:

Selbst das Jahr 2000 kann ich nicht eingeben!
Wo ist der richtige Schalter?


Außerdem ist merkwürdig, daß man mit Daten von 01.01.0001 .. 31.12.9999
ohne Gemecker vernünftig rechnen kann

Gruß

Wolfagng

Tyrael Y. 21. Sep 2009 15:55

Re: Differenz von Datum1 und Datum2
 
Hab ich doch geschrieben...ok nochmal

Delphi-Quellcode:
..
MinDate := 01.01.0001;
MaxDate := 31.12.9999;
...

Wolfgang Mix 21. Sep 2009 16:05

Re: Differenz von Datum1 und Datum2
 
Ich wiederhole mich gerne auch noch einmal

Zitat:

..
MinDate := 01.01.0001;
MaxDate := 31.12.9999;
...
Das habe ich im Objektinspektor genau so eingetragen (10-stellig):

Trotzdem ist das Datumsfeld für Eingaben gesperrt. (D2005)

[OT] Muß 'mal kurz einkaufen [/OT]

Gruß

Wolfgang

Tyrael Y. 22. Sep 2009 07:19

Re: Differenz von Datum1 und Datum2
 
Guten Morgen Wolfgang,

ich kann das bei meiner Delphi Version (Delphi RAD Studio) nicht nachvollziehen,
bei mir geht alles, bis auf, daß ich Jahreszahlen kleiner 1752 nicht eingeben kann.


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

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