AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Rechnen mit Zeiten zur Berechnung von Spesen
Thema durchsuchen
Ansicht
Themen-Optionen

Rechnen mit Zeiten zur Berechnung von Spesen

Ein Thema von PASST · begonnen am 12. Mär 2008 · letzter Beitrag vom 14. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2      
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#1

Rechnen mit Zeiten zur Berechnung von Spesen

  Alt 12. Mär 2008, 10:47
Hallo allerseits,

ich möchte eine Anwendung zur Berechnung von Spesen schreiben. Somit muss ich mit Zeiten rechnen und dabei mit einer Genauigkeit auf Minuten.

Ich habe jetzt in Delphi mit Zeiten experimentiert und bin dabei auf Probleme durch Rundungen gestoßen. Dabei war die Differenz z.B. von (16:17 - 16:16) = (16:17 - 16:15). Ok, das liegt sicherlich an meiner Funktion, die naiv außer Acht läßt, dass ein Tag nicht 1000 Minuten sondern 1440 Minuten hat.

Nun habe ich dieses und andere Foren durchforstet und den Tipp gefunden die TDateTime-Werte mit dem Faktor 1440 = 24*60 in Integer-Werte umzurechnen. Bevor ich jetzt per Zufall auf irgendwelche Probleme stoße, vorab die Frage: Kann es hierbei auch Rundungsprobleme geben?

Gruß
Peter
  Mit Zitat antworten Zitat
Benutzerbild von Der.Kaktus
Der.Kaktus

Registriert seit: 22. Jan 2008
Ort: Erfurt
958 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Rechnen mit Zeiten zur Berechnung von Spesen

  Alt 12. Mär 2008, 11:01
hallo,

schau mal hier Zeitdifferenzen
Gruss Kaki

Repeat Until true=false;
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Rechnen mit Zeiten zur Berechnung von Spesen

  Alt 12. Mär 2008, 13:44
Hm, der Link sagt allerdings nichts über eventuelle Rundungsprobleme beim Rechnen in Minuten. Oder habe ich da etwas nicht richtig verstanden?
  Mit Zitat antworten Zitat
Benutzerbild von Der.Kaktus
Der.Kaktus

Registriert seit: 22. Jan 2008
Ort: Erfurt
958 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Rechnen mit Zeiten zur Berechnung von Spesen

  Alt 12. Mär 2008, 13:58
bei dieser
Delphi-Quellcode:
If YearsBetween(Zeit1, Zeit2) <> 0 Then
  S := IntToStr(YearsBetween(Zeit1, Zeit2)) + ' Jahre
Else If MonthsBetween(Zeit1, Zeit2) <> 0 Then
  S := IntToStr(MonthsBetween(Zeit1, Zeit2)) + ' Monate
Else If WeeksBetween(Zeit1, Zeit2) <> 0 Then
  S := IntToStr(WeeksBetween(Zeit1, Zeit2)) + ' Wochen ' + IntToStr(Round(Abs(Zeit) - WeeksBetween(Zeit1, Zeit2) * 7)) + ' Tage
Else If DaysBetween(Zeit1, Zeit2) <> 0 Then
  S := IntToStr(DaysBetween(Zeit1, Zeit2)) + ' Tage ' + TimeToStr(Abs(Zeit) - DaysBetween(Zeit1, Zeit2))
Else
  S := TimeToStr(Abs(Zeit1 - Zeit2));


Variante passieren keine Rundungsfehler.
Gruss Kaki

Repeat Until true=false;
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Rechnen mit Zeiten zur Berechnung von Spesen

  Alt 12. Mär 2008, 14:09
Du willst es minutengenau haben?
Dann wirst du auch keine Rundungfehler bekommen.
TDateTime ist millisekundengenau.

Du solltest nicht auf eigene Faust rechnen, sondern die bereitgestellten Funktionen nutzen.

Öffne mal die Hilfe.
Tipp bei der Index-Suche z.B. Now ein.
Klicke auf den Beitrag zu der Now-Funktion.

Bei der Erklärung zur Now-Funktion z.B. steht da jetzt Kategorie und darunter ein Link "Datum und Uhrzeit".

Klicke auf den Link un du erhälst jede Menge Datums/Zeit Funktionen/Prozeduren.
Mit diesen solltest du alles was du magst berechnen können.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Rechnen mit Zeiten zur Berechnung von Spesen

  Alt 12. Mär 2008, 15:35
Hm, ich habe da noch einen Fehler. Aber das liegt wohl eher daran, wie ich Datum und Uhrzeit zusammenbastele.Ergebnis := MinutesBetween(Trunc(dt1.Date) + Frac(dt3.Time), Trunc(dt2.Date) + Frac(dt4.Time)) Ich habe für Start und Ende vier TDateTimePicker verwendet, um Datum und Uhrzeit getrennt abzubilden. Das Ergebnis ist für:
'20.12.2007 16:17 und 20.12.2007 16:16' -> 1
'20.12.2007 16:17 und 20.12.2007 16:15' -> 1

Da kann doch irgendwas nicht stimmen. Genau das sind die Rundungsprobleme, die ich fürchte.

Hat jemand eine Idee?

Gruß
Peter
  Mit Zitat antworten Zitat
DelphiKlaus

Registriert seit: 18. Okt 2006
100 Beiträge
 
Delphi 6 Professional
 
#7

Re: Rechnen mit Zeiten zur Berechnung von Spesen

  Alt 12. Mär 2008, 15:50
Das liegt vielleicht daran, dass TDateTime nichts anderes als eine Realzahl ist.

Vielleicht funktioniert es so

Ergebnis := MinutesBetween(Trunc(dt1.Date) + Frac(dt3.Time) + 1 / SecsPerDay, Trunc(dt2.Date) + Frac(dt4.Time) - 1 / SecsPerDay) Also bei der weiter in der Zukunft liegenden Zeit vorsichtshalber eine Sekunde dazu und bei der anderen eine Sekunde abziehen


MfG

Klaus
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Rechnen mit Zeiten zur Berechnung von Spesen

  Alt 12. Mär 2008, 16:13
Danke, soweit klappt das schon mal.
Ich kann mir dieses seltsame Verhalten nur so erklären, dass Delphi automatisch zu der Uhrzeit, die ich in Minuten angebe, zufällig Millisekunden hinzuaddiert. Könnte das hinkommen?
  Mit Zitat antworten Zitat
bluesbear

Registriert seit: 14. Dez 2005
Ort: Hahnstätten
355 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Rechnen mit Zeiten zur Berechnung von Spesen

  Alt 12. Mär 2008, 16:31
So ungefähr. Eine Sekunde ist ja ein 86400stel, und dafür gibt es in einem TDateTime (Double) nicht immer eine exakte binäre Entsprechung. Da treten in der Praxis dann schon Probleme auf, z.B. bei if t1 = t2 then ... der Vergleich kann False ergeben, selbst wenn beide (Uhr)Zeiten auf die Sekunde gleich sind.
Klaus M. Hoffmann
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#10

Re: Rechnen mit Zeiten zur Berechnung von Spesen

  Alt 12. Mär 2008, 16:34
Ich fand die Idee mit dem Multiplizieren gar nicht so schlecht.
Delphi-Quellcode:
ZeitInMinuten1 := trunc(zeit1 * 1440);
ZeitInMinuten2 := trunc(zeit2 * 1440);
Differenz := ZeitInMinuten2 - ZeitInMinuten1;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:28 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