![]() |
Zeit zwischen 2 daten
Hi Leute,
Ich habe 2 Daten und möchte die zeit zwischen ihnen auslesen. Habs bislang so probiert:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Tage,t1,t2 : Tdatetime; zeit :Ttime; s1,s2:string; begin Label1.Caption:=Timetostr(Now); Label2.Caption:=Datetimetostr(Now); s1:=datetimetostr(now); s2:='03.06.2010 18:34:30'; Label3.Caption:=s1 + ' ' + s2;; t1:=strtodatetime(s1); t2:=strtodatetime(s2); Tage:=t1 - t2; Label4.Caption:=datetimetostr(Tage); end; Dies funktioniert aber nicht, es ergiebt immer das gleiche: 4.1.1900 ..... wo liegt der fehler? lg Wallwriht als hinweis noch: Die label 1-3 sind zur hilfe um die einzelnen Daten zu zeigen. |
AW: Zeit zwischen 2 daten
Schau dir mal die Unit DateUtils an
|
AW: Zeit zwischen 2 daten
TDateTime ist intern nur ein Extended, d.h. dort steht zurzeit ein Wert von über 30000 drin. Das Startdatum, d.h 0, ist der 1.1.1900 (soweit ich das noch weiß). Ein Tag zählt dabei als 1. Siehe:
Delphi-Quellcode:
Das Problem bei dir ist, dass du dir das konkrete Datum ausgeben lässt. Es sind zwar drei Tage vergangen, aber du musst das immer relativ zum Startdatum sehen. So wie du es machst ist es relativ vom 1.1.1900 aus, plus die Difference.
var
Timestamp : TDateTime; begin Timestamp := Now(); Timestamp := Timestamp + 1; // Einen Tag dazu addieren end; |
AW: Zeit zwischen 2 daten
Schau dir mal die Funktion DaysBetween (F1) an
|
AW: Zeit zwischen 2 daten
Zitat:
Delphi-Quellcode:
, das sollte die Differenz in Tagen ergeben. Zur genaueren Ausgabe kannst Du wie erwähnt die Funktionen aus DateUtils nutzen oder selbst umrechnen.
Label4.Caption:=FloatToStr(Tage);
|
AW: Zeit zwischen 2 daten
habe mir gerade days between angeschaut werde aber nnicht schlau draus. soll ich der funktion einfach anow und athen übergeben und das result ust dann mein komplettes ergebnis?
Das Problem ist auch das ich das ergebnis auf die minute oder sogar sekunde brauche |
AW: Zeit zwischen 2 daten
@ s.h.a.r.k:
Tag 0 ist der 30.12.1899, warum auch immer :wall: @wallwriht: Ja! Die Vorkommazahl ist die Anzahl der Tage, die Nachkommastellen kannst du mit Trunc abschneiden |
AW: Zeit zwischen 2 daten
Weil 1 halt der 01.01.1900 ist
|
AW: Zeit zwischen 2 daten
@wallwriht: Du übergibst der Funktion 2 Daten und erhältst die Differenz in Tagen.
[edit] Allerdings nur in ganzen Tagen, da eine ganze Zahl zurückgegeben wird [/edit] |
AW: Zeit zwischen 2 daten
Und weil 2 dann wohl der 02.01.1900 ist :mrgreen:
@Wolfgang Mix: Asche auf mein Haupt :-| |
AW: Zeit zwischen 2 daten
Ein TDateTime ist Datum und Uhrzeit und hat eigentlich nichts mit einer Zeitspanne zu tun. Zumindest habe ich noch nie erlebt das jemand sagt "ich habe die Schulbank das letzte mal vor 14. Juni 1980 13:30 Uhr" gedrückt.
Wenn du also eine Zeitspanne messen willst solltest du dir als erstes bewusst sein in welcher Einheit das Ergebnis sein soll. |
AW: Zeit zwischen 2 daten
Im Klartext: Ein TDateTime ist nur bedingt für eine Zeitspanne zu gebrauchen
|
AW: Zeit zwischen 2 daten
*Psst* das hatte ich doch schon indirekt verraten ;)
|
AW: Zeit zwischen 2 daten
Und ich schon weit aus vorher *lach* Verwende daher auch seltenst TDateTime, sondern meist nur Extended.
|
AW: Zeit zwischen 2 daten
Indirekt ist manchmal halt nicht direkt genug
|
AW: Zeit zwischen 2 daten
Zitat:
|
AW: Zeit zwischen 2 daten
Also um es nochmal zusammenzufassen:
Delphi-Quellcode:
macht keinen Sinn, da datetimetostr(4); genau der 04.01.1900 ist.
datetimetostr(Tage);
eher so:
Delphi-Quellcode:
ganz korrekt wäre es alles einzel aufdröseln.
inttostr(trunc(Tage)) + 'Tage und ' + timetostr(Frac(Tage)) + 'Stunden:Minuten:Sekunden';
|
AW: Zeit zwischen 2 daten
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
AW: Zeit zwischen 2 daten
@Wolfgang Mix: wie gesagt
Zitat:
|
AW: Zeit zwischen 2 daten
RichtigI
Btw: Alle Delphi-Funktionen, die Zeitdifferenzen zurückgeben und das Schlüsselfunktionen *between" in sich tragen, sind fehlerhaft, da sie Nachkommastellen abschneiden, besser aber auch nicht zuverlässig sind die, die das Schlüsselwort "span" in sich tragen, wenn man sie vernünftig rundet. Ich werde demnächt Ersatzfunktionen bereitstellen, die hoffentlich fehlerfei sind. Einige gibt es hier schon in der DP. |
AW: Zeit zwischen 2 daten
@Wolfgang,
in wieweit interessieren die Nachkommastellen wenn man (wie der TE) die zeitliche Differenz in Tagen haben will? Also kurz, was spricht da gegen daysBetween? Grüße Klaus |
AW: Zeit zwischen 2 daten
Aus #1:
Zitat:
liefert zwangsweise die Differenz 0 statt 1. Mit s1:=datetostr(now); wird es natürlich richtig Tagesdifferenzen sollte man ab Mitternacht rechnen :D BTW: Die Zeitstempel von Delphi sind exakt, man muss nur logisch damit umgehen :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 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