Announcement

Collapse
No announcement yet.

Datumsfunktion-MinutesBetween: Wenn das kein Bug ist .....

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datumsfunktion-MinutesBetween: Wenn das kein Bug ist .....

    ...dann weiß ich auch nicht. Versucht mal folgendes : <br><br>
    ShowMessage(IntToStr(MinutesBetween(StrToDate('22. 08.01')+StrToTime('06:00'),StrToDate('22.08.01')+S trToTime('14:00'))));<br>
    Ergebniss : Richtig 480 Minuten<br><br>

    ShowMessage(IntToStr(MinutesBetween(StrToDate('22. 08.01')+StrToTime('06:00'),StrToDate('22.08.01')+S trToTime('13:00')))); <br>
    Ergebniss : FALSCH 419 Minuten<br><br>

    Kann das jemand unter Delphi 6 bestätigen oder gehen nur bei mir die Uhren anders ;-))) ? <br><br>
    Gruss Axel

  • #2
    Hallo,<p>
    D6 schneidet einfach das Komma ab:<p>
    <pre>function MinutesBetween(const ANow, AThen: TDateTime): Int64;
    begin
    Result := Trunc(MinuteSpan(ANow, AThen));
    end;
    </pre>
    Also addiere einfach immer eine halbe Minute dazu, dann wird es immer funktionieren, da das ja dann dem Runden entspricht. Mit ziemlicher Sicherheit kommt nach einigen Rechenoperationen bei der Funktion nämlich 419.999999999 raus, und das kann man nunmal nicht verhindern.<p>
    Grüße, Mario Noac
    Schöne Grüße, Mario

    Comment


    • #3
      Schon klar. Unter Kylix macht er übrigens das gleiche

      Comment


      • #4
        Hi

        Allerdings erwarte ich bei der funktion <b>MinutesBetween</b> das die Funktion auch Minutengenau arbeitet und rundet ! Also doch ein BUG. Mir fallen immer mehr solcher "Schlampereien" bei Borland auf, leider

        Gruß Hage

        Comment


        • #5
          Das Problem ist, das man solche Fehler meist nur durch Zufall findet. Ich mache gerade eine kleine Arbeitszeitberechnung und muss ergo ziemlich intensiv Gebrauch von dieser Funktion machen. Ich mußte dabei feststellen, das der Fehler sehr häufig auftritt. Bei 20 Arbeitstagen wären das 20 Minuten die jemand nicht bezahlt bekommt. Das erkläre mal einen Arbeiter, dessen Lohn davon abhängt. <BR>
          Aber, bei anderen Herstellern gibt's genau soviele und zum Teil noch schlimmere Bugs.<BR><BR>
          Gruss & schönes WE<BR>
          Axe

          Comment


          • #6
            HI

            In unserem Personalmanagementsystem gehen wir anders vor. Anstatt mit TDateTime oder Floats zu arbeiten nehmen wir die Minuten in einem Integer. Mit 1440 Minuten per tag ist das weniger ein Problem und Rundungsfehler können nicht mehr auftreten. Zusätzlich werden komplexere Berechnungen extrem schneller (32Bit Arithmetik) und viel Speichersparender.

            Gruß Hage

            Comment


            • #7
              Hallo, <br><br>
              mir bleibt auch nix anderes übrig, als eigene Funktionen zu entwickeln. Ich finde es nur ziemlich schlimm, wenn man das auf Grund von Bugs tun muss. Ich habe nunmal 2 Datumsstrings von der Zeiterfassung bekommen in der Form "27.08.2001 06:00" und "27.08.2001 14:00". Was liegt da näher als die integrierten Funktionen zu benutzen ? Man hat ja auch'ne verdammt grosse Menge Geld in ein Entwicklungstool investiert und möchte nicht alles nachprüfen müssen, sondern sich auf die gebotene Vielfalt verlassen können. Zumal m.E. solche Bug's eigentlich mit einem Patch innerhalb von Stunden erledigt sein sollten. <br><br>
              Gruss<br>
              Axe

              Comment

              Working...
              X