3h4m 11040 3h4m
1h2m3s 3723 1h2m3s
1h5s 3605 1h5s
3m4s 184 3m4s
1d2h3m4s 93784 1d2h3m4s
3x -1
2m2m -1
23h59m59s 86399 23h59m59s
####
my @time_values = qw [ d h m s ];
my %time_value = ( d => 86400, h => 3600, m => 60, s => 1 );
sub string_to_time
{
my ($time) = @_;
my $value = 0;
foreach my $letter (@time_values)
{
if ($time =~ s/(\d+)$letter//)
{
$value += $1 * $time_value{$letter};
}
}
return -1 if length $time;
return $value;
}
sub time_to_string
{
my ($time) = @_;
my $value = '';
foreach my $letter (@time_values)
{
my $time_value = $time_value{$letter};
if ($time > $time_value)
{
$value .= int($time/$time_value).$letter;
$time %= $time_value;
}
}
return $value;
}
####
#!/usr/bin/perl -w
use strict;
my @test = qw [ 3h4m 1h2m3s 1h5s 3m4s 1d2h3m4s 3x 2m2m 23h59m59s ];
foreach (@test)
{
my $s2t = string_to_time($_);
my $t2s = time_to_string($s2t);
printf ("%-15s %-10s %-10s\n", $_, $s2t, $t2s);
}