Gleitkommazahl in Zeitstring umwandeln

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
erik
Beiträge: 11
Registriert: Di 18. Okt 2011, 18:11

Gleitkommazahl in Zeitstring umwandeln

Beitrag von erik »

Hallo,

ich habe ein Problem ;)

Ich versuche ein Excel-Datenblatt auszuwerten, darin enthalten ist eine Zeitangabe (Dauer eines Versuches) die in Excel als hh:mm:ss angezeigt wird (Bsp: 24:01:25) aber wenn man die Zelle ausließt wird dieser Wert als Kommazahl angegeben (1,0009837962963), ich habe schon versucht die Zahl mit TimeToStr() ,FormatDateTime() etc. umzuwandeln, da erhalte ich allerdings nur (wenn überhaupt) 00:01:25 - kann mir jemand helfen, wie ich die korrekte Angabe erhalte, also mit der richtigen Stundenzahl im Format hh:mm:ss?

Vielen Dank und einen schönen Sonntag

Erik

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Gleitkommazahl in Zeitstring umwandeln

Beitrag von mschnell »

Offensichtlich verwendet Execll einen anderen Umrechnungsfaktor Floating Wert -> Zeit als Lazarus.

In Lazarus ist 1.0000 = ein Tag.

in Execll: keine Ahnung. Kannst Du aber sicher leicht ausprobieren.

-Michael

wp_xyz
Beiträge: 5134
Registriert: Fr 8. Apr 2011, 09:01

Re: Gleitkommazahl in Zeitstring umwandeln

Beitrag von wp_xyz »

TTime ist eine Gleitkommazahl, die die Zeit eines Tages, beginnend bei 0:00, auf das Intervall zwischen 0..1 abbildet. Werte größer als 1 werden abgeschnitten. Aber das kann man einfach korrigieren, indem nach je Ganzzahl-Anteil 24 Stunden hinzuaddiert. Folgender Button-Click-Code zeigt bei mir das richtige Ergebnis an:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
const
  t = 1.0009837962963;
var
  hr,min,sec,s100: word;
begin
  DecodeTime(t, hr,min,sec,s100);
  inc(hr, trunc(t)*24);
  ShowMessage(Format('%.2d:%.2d:%.2d.%.3d', [hr, min, sec, s100]));
end;

Antworten