lax has asked for the wisdom of the Perl Monks concerning the following question:

hi monks,
i want to add two "time" values say..
$time1 = 12:30:36 $time2 = 12:45:03
the output should be the sum of $time1 and $time2 which should be in the format hh:mm:ss
How do i go abt this
is there any function to do this..
I did search for this in google and perlmonks ..but couldnt get a proper solution
So kindly help me monks
thanks
lax

Code tags added by holli as per consideration.

Replies are listed 'Best First'.
Re: function to add time
by gellyfish (Monsignor) on Aug 29, 2006 at 08:15 UTC
Re: function to add time
by shmem (Chancellor) on Aug 29, 2006 at 08:18 UTC
    How did you search in perlmonks?

    Super Search on the term 'time' in the title brings up changing time date format., and in this thread there is e.g. Re: changing time date format., which references Date::Calc.

    Take a look at that, it might fit your needs.

    --shmem

    _($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                                  /\_¯/(q    /
    ----------------------------  \__(m.====·.(_("always off the crowd"))."·
    ");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}
Re: function to add time
by McDarren (Abbot) on Aug 29, 2006 at 08:41 UTC
    Assuming that you expect the answer to be '25:15:39', and just for the sake of it - here is a solution without using any module:
    #!/usr/bin/perl -wl use strict; my $time1 = '12:30:36'; my $time2 = '12:45:03'; print sum_times($time1, $time2); sub sum_times { my $secs; for (@_) { chomp; my ($h, $m, $s) = split /:/; $secs += ($h*3600 + $m*60 + $s); } return sec_to_hms($secs); } sub sec_to_hms { use integer; local $_ = shift; my ($h, $m, $s); $s = $_ % 60; $_ /= 60; $m = $_ % 60; $_ /= 60; $h = $_; return sprintf("%02d:%02d:%02d",$h, $m, $s); }

    Notes:

    • Does not perform any sanity checking on the data.
    • Should "add" as many "times" as you wish to throw at it.
    • You are still probably better advised to use a module for this type of task.

    Cheers,
    Darren