in reply to Re: Getting times (weeks, days, hours, minutes, seconds)
in thread Getting times (weeks, days, hours, minutes, seconds)
The was nothing requiring date math in the OP, but DateTime also does time math. Since the OP is dealing with durations, she'd need DateTime::Duration.
Unfortunately, it doesn't produce the result one would expect because DateTime(::Duration) realises that not every minute has 60 seconds. Some are longer due to leap seconds.
use strict; use warnings; use DateTime::Duration qw( ); my @times = qw( 5:21 8:01 5:37 7:19 5:46 7:44 6:43 7:17 8:02 6:50 7:54 + 8:44 ); my $dur = DateTime::Duration->new(); for my $time (@times) { my ($mins, $secs) = split(/:/, $time); $dur += DateTime::Duration->new( minutes => $mins, seconds => $secs, ); } printf("%s hours, %s minutes, %s seconds\n", $dur->in_units(qw( hours minutes seconds )) );
1 hours, 19 minutes, 378 seconds
From the docs, the only conversions possible are:
Now, you can use a reference datetime to determine minute length.
... my $dur2 = do { my $ref = DateTime->new( year => 2006, month => 1, day => 1, hour => 0, minute => 0, second => 0, time_zone => 'UTC', ); $ref + $dur - $ref }; printf("%s hours, %s minutes, %s seconds\n", $dur2->in_units(qw( hours minutes seconds )) ); my $dur3 = do { my $ref = DateTime->new( year => 2005, month => 12, day => 31, hour => 23, minute => 59, second => 59, time_zone => 'UTC', ); $ref + $dur - $ref }; printf("%s hours, %s minutes, %s seconds\n", $dur3->in_units(qw( hours minutes seconds )) );
1 hours, 19 minutes, 378 seconds 1 hours, 25 minutes, 18 seconds # All of the minutes had 60 seconds. 1 hours, 25 minutes, 19 seconds # One of the minutes had 61 seconds.
Update: Added example where leap seconds affect the result.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: Getting times (weeks, days, hours, minutes, seconds)
by JavaFan (Canon) on Jul 05, 2010 at 09:55 UTC | |
by ikegami (Patriarch) on Jul 05, 2010 at 16:18 UTC |