Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zeit runden? (https://www.delphipraxis.net/114227-zeit-runden.html)

API 21. Mai 2008 20:01


Zeit runden?
 
Hi,

Habe mal eine Frage:

Wie kann ich einen TDateTime Wert auf 5 Min genau (ab)runden?

Dieser Code zeigt beispielsweise 21.05.2008 21.01 an.
Die Zeit soll aber so abgerundet werden: 21.05.2008 21.00

Delphi-Quellcode:
FormatDateTime('dd.mm.yyyy hh:mm', Now)

bluesbear 21. Mai 2008 20:12

Re: Zeit runden?
 
Hi API,
suche hier mal nach DateTimeToMinutes - hilft dir das weiter?

marabu 21. Mai 2008 20:20

Re: Zeit runden?
 
Hallo,

ich könnte mir sowas vorstellen:

Delphi-Quellcode:
uses
  DateUtils;

function IntervallStart(dt: TDateTime; size: Word): TDateTime;
var
  n: Cardinal;
begin
  n := MinutesBetween(dt, 0) div size * size;
  Result := n * OneMinute;
end;
Getippt und nicht getestet.

Freundliche Grüße

API 21. Mai 2008 20:22

Re: Zeit runden?
 
Ich habe es nun so gemacht. Vielleicht gibt es eine einfachere Möglichkeit?

Delphi-Quellcode:
procedure RoundDownTo5Min(var h, m: Word);
begin
  m := 5 * Trunc((m - 2.5) / 5.0);
  if m = 60 then
  begin
    Inc(h);
    m := 0;
  end;
end;

DecodeDateTime(Now, AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond);
RoundDownTo5Min(AHour, AMinute);
ATime := EncodeDatetime(AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond);
label1.Caption := FormatDateTime('dd.mm.yyyy hh:mm', ATime));
Edit: Danke Achim, werde deinen Code noch ausprobieren

FAlter 21. Mai 2008 20:34

Re: Zeit runden?
 
Hi,

und was passiert um 23:59?

Mfg
FAlter

sx2008 22. Mai 2008 03:20

Re: Zeit runden?
 
Ungetestet, sollte aber gehen ;-)
Delphi-Quellcode:
function TimeFloor5Min(time:TDateTime):TDateTime;
const Min5 = 5.0 / (24.0*60.0);
begin
   Result := Trunc(time / Min5) * Min5;
end;

Chemiker 22. Mai 2008 18:40

Re: Zeit runden?
 
Hallo,

kann man das nicht so lösen?

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  zeit : Extended;
begin
  zeit := StrToTime(Edit1.Text);
  zeit := Round(zeit*ZEIT_5MINUTEN)/ZEIT_5MINUTEN; // ZEIT_5MINUTEN = 12 * 24
  Label1.Caption := FormatDateTime('t', zeit);
end;
Bis bald Chemiker


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 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