![]() |
Wann hat sich die Funktion SecondsBetween geändert
Hallo,
ich benutze in einem Delphi 6 Programm die Funktion SecondsBetween. Dabei ist mir ein Fehler aufgefallen, den mann so reproduzieren kann:
Delphi-Quellcode:
In meinem Delphi 6 bekomme ich hier 10 raus. Mit meinem XE2 kommt die erwartete 11 raus. Ich muss allerdings 6 benutzen, da ich eine CSV Datei mit dem
procedure TForm35.Button1Click(Sender: TObject);
var s1,s2:string; d1,d2:TDateTime; diff:Integer; begin s1:='05:23:08'; s2:='05:23:19'; d1:=StrToDate('16.07.2014')+StrToTime(s1); d2:=StrToDate('16.07.2014')+StrToTime(s2); diff:=SecondsBetween(d1,d2); Caption:=IntToStr(diff); end; ![]() |
AW: Wann hat sich die Funktion SecondsBetween geändert
Wieso ist es denn wichtig wann das passiert ist?
Jetzt geht es richtig und früher war es falsch. Im Grunde brauchst du eh nur die Versionen selber prüfen, welche ihr einsetzt und dann interessiert nur "hier geht es, aber da nicht". Sicher das sich SecondsBetween geändert hat und nicht StrToTime? Eventuell ist die CPU auch auf einen anderen Rundungsmodus eingestellt, z.B. durch irgendwelche Fremdkomponenten, welche einfach so an programmglobalen Dingen rumfummeln, oder durch andere Grundeinstellungen der RTL/VCL. 6? ... Unicode ... Da geht doch alles bis D2007 (D7, D8, D2005, D2006, D2007) Also einfach mal D2007 ausprobieren und wenn es da auch noch nicht richtig geht, dann habt ihr eh pech und solltet den Code nun doch langsam mal portieren. :angel: (Beim Kauf von XE2 konntet ihr euch ja alles runter bis D7 freischalten lassen) |
AW: Wann hat sich die Funktion SecondsBetween geändert
Dann wäre es doch einfacher diese unicodefähig zu machen.
|
AW: Wann hat sich die Funktion SecondsBetween geändert
Momentan habe ich aber nur XE2 und 7 installiert. Klar kann ich jetzt die verschiedenen Versonen bis 2007 installieren und testen. Einfacher wäre es aber doch gewesen wenn irgendwo ersichtbar gewesen wäre. Geändert ab x.y.
Es war natürlich praktisch die Datei einfach zu nehmen und das Einlesen der CSV Dateie war erledigt. |
AW: Wann hat sich die Funktion SecondsBetween geändert
Zitat:
Zitat:
Habe ich einen Fehler in meinen Überlegungen? Aber ausprobieren wäre ja interessant:
Delphi-Quellcode:
Was kommt denn da raus? Bzw. mit den Zeiten vom TE?
var oneSecond double;
begin oneSecond := (strToDateTime('16.07.2014 13:04:05')-StrToDateTime('16.07.2014 13:04:04'))*86400; writeln(oneSecond); end. |
AW: Wann hat sich die Funktion SecondsBetween geändert
Zitat:
Grüße, Christoph |
AW: Wann hat sich die Funktion SecondsBetween geändert
Zitat:
|
AW: Wann hat sich die Funktion SecondsBetween geändert
9.99999605119228E-0001 mit Delphi 6 und XE2
|
AW: Wann hat sich die Funktion SecondsBetween geändert
Alle Between-Time-Funktionen arbeiten mit Millisekunden.
Also erstmal auf Millisekunden umgerechnet, dann die Differenz gebildet und zum Schluß abgerundet (Integerdivision durch die entsprechende Zeiteinheit, hier MSecPerSec). Es wird also 3 Mal (ab)gerundet. Die Betweenfunktionen geben halt jede "abgeschlossene" Zeiteinheit raus und nicht die gerundeten. In diesem Fall lieg die Lösung darin, daß an das Endedatum z.B. eine halbe Sekunde angehängt wird, oder Emba hätte, wie z.B. bei den CompareValue-Funktionen, ein Epsilon zur Verfügung gestellt, bzw. würde runden statt abzurunden. Zitat:
Jetzt rechnet die Funktion doch richtig und früher war sie "kaputt". :zwinker: |
AW: Wann hat sich die Funktion SecondsBetween geändert
Zitat:
Ist Qualität = 'gut' oder eher und in erster Linie 'gleichbleibend', 'transparent' und vor allen Dingen 'nachvollziehbar'? :zwinker: Etwas, was immer gleich ist, ist qualitativ besser, als etwas, von dem man nicht weiß, ob es noch gleich ist. Qualität ist in erster Linie ein Maß für die Wiederholbarkeit und erst dann ein Maß für Güte. McDonalds hat zum Beispiel eine sehr hohe Qualität. Schmeckt zwar beschissen, aber immer gleich, man kann sich drauf verlassen. Aber es war polemisch. Kann nämlich sein, das das in irgend einer Release note drin stand. @himitsu: Also werden doch die Stellen ausgereizt. Ich habe hier kein Delphi und kann das nicht nachprüfen. Danke für die Mühe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:51 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