![]() |
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 |
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. |
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.
|
Re: Differenz von Datum1 und Datum2
|
Re: Differenz von Datum1 und Datum2
Hallo,
ich würds so lösen:
Delphi-Quellcode:
Ciao Chris
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'; |
Re: Differenz von Datum1 und Datum2
Oder kürzer:
Delphi-Quellcode:
Wobei dann auch die oben angesprochenen 2 Minuten als ganzer Tag gelten :mrgreen:
Label1.Caption := Format('Die Differenz zwischen Datum1 und Datum2 ist %d Tage',
[abs(trunc(StrToDate(Edit1.Text)) - trunc(StrToDate(Edit2.Text)))]); |
Re: Differenz von Datum1 und Datum2
Noch kürzer geht es wirklich nicht :-)
Gruß Wolfgang |
Re: Differenz von Datum1 und Datum2
Zitat:
Delphi-Quellcode:
Label1.Caption := Format('Die Differenz zwischen Datum1 und Datum2 ist %d Tage',
[DaysBetween(StrToDate(Edit1.Text), StrToDate(Edit2.Text))]); |
Re: Differenz von Datum1 und Datum2
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:
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: |
Re: Differenz von Datum1 und Datum2
Und noch etwas:
Für die Eingabe von Datum/Uhrzeit verwendet man ![]() Dann spart man sich die lästige Umwandelei. Sherlock |
Re: Differenz von Datum1 und Datum2
Zitat:
wollte vorhin eigentlich nur schnell eine Differenz für diesen Beitrag haben ![]() 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: |
Re: Differenz von Datum1 und Datum2
@Sherlock
Stimmt, so hatte ich das auch 'mal gemacht.
Delphi-Quellcode:
Da muß man aber wie blöde in den Kalendern navigieren.
Label1.Caption:=IntToStr(round(DateTimePicker1.Date-DateTimePicker2.Date);)
Alternativ gäbe die SpinEdits. Ist wohl alles Geschmackssache. Mir sind am liebsten nackte Funktionen. Gruß Eolfgang |
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 |
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 |
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:
|
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. |
Re: Differenz von Datum1 und Datum2
Zitat:
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 |
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. |
Re: Differenz von Datum1 und Datum2
Ich zitiere mich selbst:
Zitat:
Außerdem ist merkwürdig, daß man mit Daten von 01.01.0001 .. 31.12.9999 ohne Gemecker vernünftig rechnen kann Gruß Wolfagng |
Re: Differenz von Datum1 und Datum2
Hab ich doch geschrieben...ok nochmal
Delphi-Quellcode:
..
MinDate := 01.01.0001; MaxDate := 31.12.9999; ... |
Re: Differenz von Datum1 und Datum2
Ich wiederhole mich gerne auch noch einmal
Zitat:
Trotzdem ist das Datumsfeld für Eingaben gesperrt. (D2005) [OT] Muß 'mal kurz einkaufen [/OT] Gruß Wolfgang |
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 16:42 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 by Thomas Breitkreuz