[gelöst] Perl - Sekunden in HH:MM:SS umwandeln

Begonnen von drhirn, 20 Januar 2021, 14:21:24

Vorheriges Thema - Nächstes Thema

drhirn

Hallo,

ich habe ein Anzahl an Sekunden. Wie kann ich die mittels Perl am einfachsten/performantesten nach HH:MM:SS umwandeln?

Danke!
Stefan

TomLee


drhirn

Danke.
FmtTime(300) liefert aber 01:05:00? Warum?

betateilchen

Weil FmtTime() die falsche Funktion dafür ist.

In welchem Bereich bewegt sich die Sekundenzahl - mehr als einen Tag? (86400 Sekunden)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

drhirn

Sollte möglichst flexibel sein, auch wenn's wahrscheinlich eher selten länger als ein Tag wird.

betateilchen

#5
{POSIX::strftime('%T', gmtime(300))}

Das funktioniert auf jeden Fall bis 86400.
Wenn der Wert größer wird, stimmt das Ergebnis hh:mm:ss auch noch, aber Du musst die Tage selbst ausrechnen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

reibuehl

Also ich würde es mit sprintf versuchen:

$timeInSec = 11534;
$timeAsHHMMSS = sprintf("%02d:%02d:%02d", int ($timeInSec / 3600), int (($timeInSec % 3600)/60), $timeInSec % 3600 % 60);

Gruß,
Reiner
Reiner.

betateilchen

Zitat von: reibuehl am 20 Januar 2021, 14:52:12
Also ich würde es mit sprintf versuchen:

Kann man machen, aber perl hat definitiv elegantere Wege, das zu lösen.

Es funktioniert innerhalb FHEM auch ohne POSIX davor.

{strftime('%T', gmtime(300))}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

drhirn

Zitat von: betateilchen am 20 Januar 2021, 14:58:25Es funktioniert innerhalb FHEM auch ohne POSIX davor.

{strftime('%T', gmtime(300))}

Perfekt! Vielen Dank!