AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Zeitsummen > 24h als string formatieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zeitsummen > 24h als string formatieren

Ein Thema von messie · begonnen am 6. Jul 2005 · letzter Beitrag vom 7. Jul 2005
Antwort Antwort
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#1

Re: Zeitsummen > 24h als string formatieren

  Alt 7. Jul 2005, 06:17
Hallo Messie,

Zitat von messie:
Im Fall der Summe von 24:00 gibt Deine Routine 23:60 aus. Auch hier wird trunc(24h) zu 0, mit dem Rest wird weitergearbeitet. Das Ergebnis ist eigentlich logisch...
meine Routine ist schon in Ordnung, aber ich fürchte, dass du beim Umgang mit deinen Summanden im Hinblick auf die interne Darstellung von TDateTime unsauber arbeitest. Du musst für dich entscheiden, ob du mit Minuten als diskreten Zeiteinheiten arbeiten möchtest (Integer-Arithmetik) oder ob du die von Borland implementierte Logik rund um den Datentyp TDateTime nutzen möchtest.

Ich benutze gerne die Borland-Routinen, weil ich dadurch meine lines of code reduzieren kann. Wissen muss man dann allerdings, dass diese Routinen beim Arbeiten mit Zeitwerten unterhalb einer halben Millisekunde nicht mehr zuverlässig sind. Das bedeutet, dass man wegen Rundungsfehlerketten immer wieder zwischen diskreten Werten und TDateTime wechseln muss (Encode* und Decode*).

Wenn du nicht weisst, wie du mit TDateTime umgehen musst, dann empfehle ich dir bei der Integer-Arithmetik zu bleiben. Allen Mitlesern kann ich versichern, dass die von mir angegebene Routine bei normalisierten Eingabewerten zuverlässig funktioniert.

marabu

Zum Spielen:
Delphi-Quellcode:
uses
  DateUtils,
  SysUtils;
var
  dt, dt1, dt2: TDateTime;

begin
  dt1 := OneHour * 8;
  dt2 := OneHour * 16;
  dt := dt1 + dt2;

  WriteLn(DateTimeToStr2(dt + OneSecond / 2500, 'd '));
  WriteLn(DateTimeToStr2(dt + OneSecond / 2000, 'd '));
  WriteLn(DateTimeToStr2(dt, 'd '));
  WriteLn(DateTimeToStr2(dt - OneSecond / 2000, 'd '));
  WriteLn(DateTimeToStr2(dt - OneSecond / 2500, 'd '));

  ReadLn;
end;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09: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-2025 by Thomas Breitkreuz