Thread Zeitangaben addieren: h:min + h:min = ? (8 answers)
Opened by MartinR at 2006-11-17 15:06

murphy
 2006-11-17 17:35
#71830 #71830
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Ob's einfach ist, wage ich zu bezweifeln, aber es geht natürlich auch von Hand -- zum Beispiel mit Hilfe solch einer Konversionsroutine, die natürlich keine Rücksicht auf Zeitzonen, Schaltsekunden oder ähnliche Hässlichkeiten nimmt ;-)

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
sub timespan2seconds {
my $ts = shift;
my $sc = 0;
if ($ts =~ m/(?:(\d+)\s+)?(\d+):(\d+)(?::(\d+))?/) {
$sc += $1 || 0;
$sc *= 24;
$sc += $2;
$sc *= 60;
$sc += $3;
$sc *= 60;
$sc += $4 || 0;
}
else {
my @pt = $ts =~ m/(\d+)([dhms])/g;
my %sf = (
'd' => 24 * 60 * 60,
'h' => 60 * 60,
'm' => 60,
's' => 1
);
$sc += shift(@pt) * $sf{shift(@pt)} while (@pt);
}
return $sc;
}


Damit gehen dann Berechnungen wie diese:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
my $x = timespan2seconds('1 20:19:33');
print "$x\n";
my $y = timespan2seconds('20h 33s 1d 19m');
print "$y\n";

$x -= timespan2seconds('2d');
$x -= timespan2seconds('34s');
$x -= timespan2seconds('20:19');
$x += timespan2seconds('1d1s');
print "$x\n";

$y += timespan2seconds('4h');
$y -= timespan2seconds('0:19:33');
$y -= timespan2seconds('2d');
print "$y\n";


(edit: Formatierungsfehler korrigiert)\n\n

<!--EDIT|murphy|1163777895-->
When C++ is your hammer, every problem looks like your thumb.

View full thread Zeitangaben addieren: h:min + h:min = ?