Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   FreePascal Zeit in Sekunden umrechnen (https://www.delphipraxis.net/187592-zeit-sekunden-umrechnen.html)

Monday 12. Dez 2015 11:09

Zeit in Sekunden umrechnen
 
Für diejenigen die es brauchen könnten...

Mit dieser Funktion kann man eine Zeit in Sekunden umrechnen:

Code:
function Zeit_In_Sekunden_Umwandeln(std_min_sek:string): integer;
{ Rechnet eine Zeit im Format Std:mm:ss in Sekunden um. Beispiel:
ShowMessage( IntToSTr( Zeit_In_Sekunden_Umwandeln('0:10:00') )); // 10 min, result 600 (sekunden}  //SH
var
    zeit : TStringList;
begin
    zeit := TStringList.Create;
    zeit.Delimiter:=':';;
    zeit.DelimitedText:=std_min_sek;
    result := StrToInt(zeit[0])*60*60+StrToInt(zeit[1])*60+StrToInt(zeit[2]);
end;
Wahrscheinlich gibt es dafür eine hauseigene Funktion, doch bevor ich stundenlange suche und probiere, habe ich selbst diese kleine Funktion geschrieben. Wollte das in die CodeLibrary schreiben, habe dort aber keine Schreibrechte.

LG
Monday

mm1256 12. Dez 2015 11:23

AW: Zeit in Sekunden umrechnen
 
Delphi-Quellcode:
function Zeit_In_Sekunden_Umwandeln(std_min_sek:string): integer;
{ Rechnet eine Zeit im Format Std:mm:ss in Sekunden um. Beispiel:
ShowMessage( IntToSTr( Zeit_In_Sekunden_Umwandeln('0:10:00') )); // 10 min, result 600 (sekunden}  //SH
var
  zeit : TStrings;
begin
  Result := 0;
  zeit := TStringList.Create;
  try
    zeit.Delimiter:=':';;
    zeit.DelimitedText:=std_min_sek;
    result := StrToInt(zeit[0])*60*60+StrToInt(zeit[1])*60+StrToInt(zeit[2]);
  finally
    zeit.free;
  end;
end;

haentschman 12. Dez 2015 11:25

AW: Zeit in Sekunden umrechnen
 
Moin...:P
Hier drängt sich erst einmal eine grundsätzliche Frage auf. Warum arbeitest du für die Zeitwerte mit string? Programmintern sollte man immer mit TDateTime arbeiten. Der formatierte String ist dann nur für die Darstellung da.

Sekunden zwischen 2 DateTime Werten: bei dir dein Wert und 0
http://www.delphipraxis.net/dp_refer...secondsbetween

mm1256 12. Dez 2015 11:39

AW: Zeit in Sekunden umrechnen
 
Na ja, manchmal ergibt sich schon die Situation, aus einem formatierten String zurück zu TDateTime rechnen zu müssen. Z.B. Importfunktionen aus Textdateien usw.

Ich wollte eigentlich (ohne Kommentar) nur auf die Speicherleiche und die fehlenden Delphi-Tags hinweisen.

Sir Rufo 12. Dez 2015 11:54

AW: Zeit in Sekunden umrechnen
 
Aber dafür drängt sich doch
Delphi-Quellcode:
StrToTime
auf?
Das Ergebnis multipliziert man mit
Delphi-Quellcode:
SecsPerDay
und ist fertig :stupid:

Mavarik 12. Dez 2015 12:43

AW: Zeit in Sekunden umrechnen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1324192)
Das Ergebnis multipliziert man mit
Delphi-Quellcode:
SecsPerDay
und ist fertig :stupid:

Stimmt, stell Dir vor, die Software wird auf dem Titan ausgeführt, da hat der Tag einen anderen Wert für
Delphi-Quellcode:
SecsPerDay
. :stupid:

Sir Rufo 12. Dez 2015 12:57

AW: Zeit in Sekunden umrechnen
 
Zitat:

Zitat von Mavarik (Beitrag 1324196)
Zitat:

Zitat von Sir Rufo (Beitrag 1324192)
Das Ergebnis multipliziert man mit
Delphi-Quellcode:
SecsPerDay
und ist fertig :stupid:

Stimmt, stell Dir vor, die Software wird auf dem Titan ausgeführt, da hat der Tag einen anderen Wert für
Delphi-Quellcode:
SecsPerDay
. :stupid:

Stell dir vor, jemand anderes soll deinen Code lesen und verstehen

Delphi-Quellcode:
function SecondsFromTime( ATime: TTime ) : Integer;
begin
  Result := ATime * 86400;
end;

function SecondsFromTimeStr( const ATimeStr: string ):Integer;
begin
  Result := SecondsFromTime( StrToTime( ATimeStr ) );
end;
oder
Delphi-Quellcode:
function SecondsFromTime( ATime: TTime ) : Integer;
begin
  Result := ATime * SecsPerDay;
end;

function SecondsFromTimeStr( const ATimeStr: string ):Integer;
begin
  Result := SecondsFromTime( StrToTime( ATimeStr ) );
end;
Wo hat der unbedarfte Leser wohl schneller die Funktionsweise erfasst?

Ja, man kann natürlich für die Lesbarkeit einen Kommentar schreiben
Delphi-Quellcode:
function SecondsFromTime( ATime: TTime ) : Integer;
begin
  Result := ATime * { Sekunden pro Tag } 86400;
end;
wir vergleichen nochmal mit
Delphi-Quellcode:
function SecondsFromTime( ATime: TTime ) : Integer;
begin
  Result := ATime * SecsPerDay;
end;
Huch, documented by code

Und wo können sich beim Tippen wohl eher Fehler einschleichen?

Darum keine magic values im Code ;)

Monday 12. Dez 2015 13:08

AW: Zeit in Sekunden umrechnen
 
Ja die Funktion ist tatsächlich entstanden aus dem Import von Textdateien. In den meisten Textdateien wird die Zeit (= gestoppte Zeit einer Anwendung) in Sekunden angezeigt und in manchen anderen wird sie in xx:xx:xx angezeigt. Und ich entschied mich alles in sekunden umzurechnen.

Luckie 12. Dez 2015 13:25

AW: Zeit in Sekunden umrechnen
 
Und damit jetzt nicht wieder jemand mit dem Pluto Beispiel ankommt nennen wir die Konstante: SECSPEREARTHDAY :mrgreen:

mm1256 12. Dez 2015 13:44

AW: Zeit in Sekunden umrechnen
 
Zitat:

Und damit jetzt nicht wieder jemand mit dem Pluto Beispiel ankommt nennen wir die Konstante: SECSPEREARTHDAY
......und bei uns in Bayern, wo die Uhren bekanntlich rückwärts gehen, was machen wir da? :oops:


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:05 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf