Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zeitberechnung eigentlich simpel, aber wie? (https://www.delphipraxis.net/89241-zeitberechnung-eigentlich-simpel-aber-wie.html)

TeronG 28. Mär 2007 09:57

Re: Zeitberechnung eigentlich simpel, aber wie?
 
:twisted: :mrgreen:

Hawkeye219 28. Mär 2007 10:31

Re: Zeitberechnung eigentlich simpel, aber wie?
 
Hallo,

ob Abs() wirklich das geeignete Mittel ist? Zwischen den im ersten Beitrag angegebenen Zeitpunkten liegt ein Zeitraum von 3:41 h, und nicht etwas 20:19 h (vorausgesetzt, der zweite Zeitpunkt liegt hinter dem ersten).

Wenn kein Datum angegeben werden soll, muß das Programm diese Intelligenz einbringen, wie es im 2. und 3. Beitrag schon angedeutet wurde:

Delphi-Quellcode:
var
  DT1, DT2 : TDateTime;
begin
  DT1 := StrToTime(edFrom.Text);
  DT2 := StrToTime(edTo.Text);
  labDifference.Caption := TimeToStr(DT2 - DT1 + Ord(DT2 < DT1));
end;
Gruß Hawkeye

TeronG 28. Mär 2007 10:36

Re: Zeitberechnung eigentlich simpel, aber wie?
 
:gruebel: hmmm ..
ok .. habich wohl zu schnell gepostet und zu wenig gedacht :oops:

cherry 28. Mär 2007 10:45

Re: Zeitberechnung eigentlich simpel, aber wie?
 
meine Funktion sieht nun so aus, hab Sie Gröstenteils
übernommen:

Delphi-Quellcode:
function TFrameDaten.Act_TimeBetween(von, bis : String): TDateTime;
var
 H,M: integer;
 R: Real;
 start,ende: TDateTime;
begin
  start := StrToDateTime(von);
  ende := StrToDateTime(bis);
  if start > ende then
    ende:= IncDay(ende);
  R:= HourSpan(start,ende);
  H:= Round(Int(R));       // Stunden
  M:= Round(Frac(R)* 60);  // Minuten
  if M = 60 then begin     // aus 60 Min wird 1 volle Stunde
    M:= 0;
    Inc(H);
   end;
  result := StrToDateTime(Format('%d:%.2d',[H, M]));
end;
Es hesisst ja man soll nie eine "Fremdfunktion" verwenden, wenn man nicht genau weis was da passiert...
na ja, also ich kappier alles voll und ganz ausser:

kann mir jmd sagen was die Parameter '%d:%.2d' bei dieser Funktion GENAU machen
Format('%d:%.2d',[H, M])); ??

ungefähr weisichs ja nur kanns mal jmd GANZ GENAU erklären? das würde mich
beeindrucken...

Hobby-Programmierer 28. Mär 2007 22:51

Re: Zeitberechnung eigentlich simpel, aber wie?
 
Zitat:

Zitat von cherry
Delphi-Quellcode:
  result:= StrToDateTime(Format('%d:%.2d',[H, M]));

% - Platzhalter (an welcher Stelle im Text (d) eingefügt werden soll)
d - Dezimalwert
: - TimeSeperator
2d - Dezimalwert (mind. 2-stellig; aus '5' wird bspw. '05'

siehe auch Delphi-Referenz durchsuchenFormat-Strings oder hier

LG Mario

Daniel G 29. Mär 2007 07:47

Re: Zeitberechnung eigentlich simpel, aber wie?
 
An dieser Stelle sei auch mal auf drei tolle Funktionen der Unit DateUtils hingewiesen:

Delphi-Quellcode:
function DaysBetween(const ANow, AThen: TDateTime): Integer;
function HoursBetween(const ANow, AThen: TDateTime): Int64;
function MinutesBetween(const ANow, AThen: TDateTime): Int64;
Und ja, sie machen genau das, was man denkt, was sie machen könnten... :mrgreen:

Hawkeye219 29. Mär 2007 10:17

Re: Zeitberechnung eigentlich simpel, aber wie?
 
Hallo Daniel,

Zitat:

Zitat von Daniel G
Und ja, sie machen genau das, was man denkt, was sie machen könnten...

...und damit leider nicht das, was cherry möchte. Die Routinen sortieren nämlich die übergebenen Parameter, wordurch man nicht mehr erkennen kann, ob ein Tagwechsel vorliegt.

Gruß Hawkeye

Angel4585 29. Mär 2007 10:29

Re: Zeitberechnung eigentlich simpel, aber wie?
 
Also wenn ich das Recht verstehe soll er sagen ob zweischen Datum1 und Datum 2 ein Tagwechsel vorliegt oder?

Ich würde das so machen

Delphi-Quellcode:
if (Trunc(Datum1)<Trunc(Datum2))then
  ShowMessage('Es liegt ein Tagwechsel vor')
else ShowMessage('Die beide Daten sind am gleichen Tag');

Daniel G 29. Mär 2007 11:24

Re: Zeitberechnung eigentlich simpel, aber wie?
 
Zitat:

Zitat von Hawkeye219
und damit leider nicht das, was cherry möchte.

Das macht seine Funktion in Beitrag #14 aber auch nicht. Insofern scheint ihn das ja nicht zu stören... ;)

Hobby-Programmierer 29. Mär 2007 15:55

Re: Zeitberechnung eigentlich simpel, aber wie?
 
Tach ...,
Zitat:

Zitat von Daniel G
Zitat:

Zitat von Hawkeye219
und damit leider nicht das, was cherry möchte.

Das macht seine Funktion in Beitrag #14 aber auch nicht. Insofern scheint ihn das ja nicht zu stören... ;)

... sehr wohl addiert er 24h hinzu, wenn EndeZeit < StartZeit
Delphi-Quellcode:
  if start > ende then
  ende:= IncDay(ende);
Zitat:

Zitat von Daniel G
An dieser Stelle sei auch mal auf drei tolle Funktionen der Unit DateUtils hingewiesen:

Delphi-Quellcode:
function DaysBetween(const ANow, AThen: TDateTime): Integer;
function HoursBetween(const ANow, AThen: TDateTime): Int64;
function MinutesBetween(const ANow, AThen: TDateTime): Int64;

Natürlich hätte der OP auch [oh]function HoursBetween(const ANow, AThen: TDateTime): Int64;[/oh] nutzen können, aber es gibt noch mehr 'tolle' Functionen in o.g. Unit! Eine davon benutzt er :wink:
[oh]function HourSpan(const ANow, AThen: TDateTime): Double;[/oh]

LG Mario


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 Uhr.
Seite 2 von 3     12 3      

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