Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Real in eine Zeitangabe umwandeln (https://www.delphipraxis.net/148886-real-eine-zeitangabe-umwandeln.html)

lbccaleb 10. Mär 2010 11:44


Real in eine Zeitangabe umwandeln
 
Hallo, ich habe vor einen Real Wert in eine Zeitangabe umzuwandeln.
Ich habe mir dann das "gebastelt":



Delphi-Quellcode:
type
  TPTime = record
    Hours,
    Minutes,
    Seconds: integer;
end;


function RealToTime(RealTime: Real): TPTime;
  begin;
    Result.Seconds := Round(Frac(RealTime) * 60);
    Result.Hours  := Trunc(Int(RealTime) / 60);
    Result.Minutes := Round(Frac(Int(RealTime) / 60) * 60);
  end;
Gibt mir bei "1,568" --> 00:01:34 aus.

Allerdings hab ich zweifel das es die beste Lösung ist, sowas zu machen da es bei mir wirklich immer ganz genau sein muss.
Und denke Profis machen das anders^^

Also wie kann man das noch machen, oder gibt es eine vorgefertigte Funktion für sowas, die ich mal wieder über sehen hab??

Sharky 10. Mär 2010 11:48

Re: Real in eine Zeitangabe umwandeln
 
Ist TTime nicht eh ein Real?

jfheins 10. Mär 2010 11:54

Re: Real in eine Zeitangabe umwandeln
 
Zitat:

Zitat von Sharky
Ist TTime nicht eh ein Real?

Ja, aber bei ihm ist 1=1 Minute, bei TTime ist 1= 1 Tag

@Topic: Die Minutenumwandlung sieht komisch aus, aber sonst fällt mir kein besserer Weg ein - außer dem obligatorischen: "Wenns ganz genau sein muss, keine Gleitkommazahlen verwenden"
"Ganz genau" solltest du aber definieren: Bis 8 Stellen kommt man mit nem Single schon iirc

himitsu 10. Mär 2010 12:06

Re: Real in eine Zeitangabe umwandeln
 
Delphi-Quellcode:
function RealToTime(RealTime: Real): TPTime;
  var i: Integer;

  begin
    i := Round(RealTime * 60); // i = Sekunden
    Result.Seconds := i mod 60;
    Result.Minutes := (i div 60) mod 60;
    Result.Hours  := i div 3600;
  end;
oder

Delphi-Quellcode:
function RealToTime(RealTime: Real): TPTime;
  var i: Integer;

  begin
    DecodeTime(RealTime / 1440, Result.Hours, Result.Minutes, Result.Seconds, i);
  end;


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