NAME

Quiq::Duration - Rechnen und Konvertieren von Zeiträumen

BASE CLASS

Quiq::Object

DESCRIPTION

Ein Objekt der Klasse repräsentiert eine Zeitdauer, die intern als numerischer Wert (Sekunden mit Nachkommastellen) gespeichert wird.

Als externe Repäsentation wird die Darstellung

DdHhMmS.Xs

verwendet, wobei

D = Anzahl Tage
H = Anzahl Stunden
M = Anzahl Minuten
S = Anzahl Sekunden
X = Bruchteil einer Sekunde

Es gelten folgende Eingenschaften:

  • führende Anteile bis auf Ss fehlen, wenn sie 0 sind

  • X fehlt, wenn 0

  • Ss erscheint immer, auch bei 0 Sekunden

  • die leere Zeichenkette ('') oder undef entspricht 0 Sekunden

  • der Sekundenanteil kann Nachkommastellen haben

Bei der Instantiierung kann die Zeitdauer auch in Doppelpunkt-Notation übergeben werden:

D:H:M:S.X

METHODS

Konstruktor

new() - Konstruktor

Synopsis

$dur = Quiq::Duration->new($sec);
$dur = Quiq::Duration->new($str);

Description

Instantiiere ein Zeitdauer-Objekt und liefere einen Referenz auf dieses Objekt zurück. Die Zeitdauer kann als numerischer Wert $sec oder als Zeichenkette $str angegeben werden. Die Zeichenkette kann auch in Doppelpunkt-Notation (D:H:M:S.X) angegeben sein.

Objektmethoden

asSeconds() - Dauer in Sekunden

Synopsis

$sec = $dur->asSeconds;

Description

Liefere die Zeitdauer in Sekunden - sofern vorhanden, mit Nachkommastellen.

asString() - Dauer als Zeichenkette

Synopsis

$str = $dur->asString;
$str = $dur->asString($prec);

Description

Liefere die Zeitdauer als Zeichenkette in der Form DdHhMmS.Xs.

asShortString() - Dauer als kürzestmögliche Zeichenkette

Synopsis

$str = $dur->asShortString(@opt);

Options

-maxUnit => 'd'|'h'|'m'|'s' (Default: 'd')

Größte dargestellte Einheit.

-minUnit => 'd'|'h'|'m'|'s' (Default: 's')

Kleinste dargestellte Einheit.

-notBlank => $bool (Default: 0)

Bei einer Zeit von 0 Sekunden wird ein Leerstring geliefert. Ist diese Option gesetzt, erfolgt immer eine Ausgabe - mit -minUnit als Einheit.

-precision => $n (Default: 0)

Anzahl der Sekunden-Nachkommastellen.

Description

Liefere die Zeitdauer als Zeichenkette der Form DdHhMmSs (per Default, siehe Option -maxUnit), wobei alle Anteile, die 0 sind, weggelassen werden, sowohl am Anfang als auch am Ende.

asArray() - Dauer als Array

Synopsis

@arr | $arr = $dur->asArray;

Description

Liefere die Dauer als Array mit den Komponenten ($days,$hours,$minutes,$seconds).

asFFmpegString() - Dauer als Parameter für ffmpeg-Option -t

Synopsis

$str = $dur->asFFmpegString;

Description

Liefere Dauer in der Form wie sie ffmpeg bei der Option -t erwartet, also im Format

H:M:S.XXX

stringToSeconds() - Wandele Zeitdauer-Angabe in Sekunden

Synopsis

$sec = $this->stringToSeconds($str);

Description

Wandele Zeichenkette zur Bezeichnung einer Zeitdauer in die Anzahl Sekunden.

Examples

Zeitdauer-Zeichenkette bestehend aus Tagen, Stunden, Mintuten, Sekunden:

$sec = Quiq::Duration->stringToSeconds('152d5h25m3.457s');
# 13152303.457

Dasselbe mit Doppelpunkt-Notation:

$sec = Quiq::Duration->stringToSeconds('152:5:25:3.457');
# 13152303.457

secondsToString() - Wandele Sekunden in Zeitdauer-Zeichenkette

Synopsis

$str = $this->secondsToString($sec,@opt);

Arguments

$sec

Anzahl Sekunden, ggf. mit Nachkommastellen.

Options

$prec (Default: 0)

Anzahl der Nachkommastellen bei den Sekunden. Ist kein Wert angegeben, wird auf ganze Sekunden gerundet.

$unit (Default: undef)

Liefere String fester Breite ab Einheit $unit.

Description

Wandele Anzahl Sekunden in eine Zeichenkette zur Bezeichnung einer Zeitdauer.

VERSION

1.222

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2024 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.