Delphi-PRAXiS

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:

haentschman 12. Dez 2015 13:47

AW: Zeit in Sekunden umrechnen
 
Zitat:

......und bei uns in Bayern, wo die Uhren bekanntlich rückwärts gehen, was machen wir da?
:P Nix... auch rückwärts bleiben die Sekunden pro Tag gleich...

Luckie 12. Dez 2015 14:12

AW: Zeit in Sekunden umrechnen
 
Bayern ist Ausland. Die sollen ihre Probleme selber lösen. :mrgreen:

Daniel 12. Dez 2015 14:27

AW: Zeit in Sekunden umrechnen
 
Seid bitte so gut und verhunzt uns das Thema nicht.

Dejan Vu 12. Dez 2015 16:14

AW: Zeit in Sekunden umrechnen
 
Wenn man sich für ordentliche Bezeichner einsetzt, wieso nennt man den Wert dann 'SecsPerDay'? Wie wäre es mit 'SecondsPerDay'? Irgendwie lesbarer, als diese ständ. Abk. Schneller wird das Programm damit doch auch nicht.

Sir Rufo 12. Dez 2015 17:31

AW: Zeit in Sekunden umrechnen
 
Zitat:

Zitat von Dejan Vu (Beitrag 1324224)
Wenn man sich für ordentliche Bezeichner einsetzt, wieso nennt man den Wert dann 'SecsPerDay'? Wie wäre es mit 'SecondsPerDay'? Irgendwie lesbarer, als diese ständ. Abk. Schneller wird das Programm damit doch auch nicht.

Weil
Delphi-Quellcode:
SecsPerDay
schon per RTL definiert ist?

Dejan Vu 12. Dez 2015 18:29

AW: Zeit in Sekunden umrechnen
 
Achso, stimmt. Wenn es in der RTL steht, ist es perfekt. Ich vergaß. :oops:

Daniel 12. Dez 2015 19:57

AW: Zeit in Sekunden umrechnen
 
Ach, von Perfektion war doch nicht die Rede.
Aber wenn eine Konstante eh schon da ist, liegt es doch nahe, sie zu verwenden.


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