Re: How do I convert seconds into a readable time?⭐
by I0 (Priest) on Aug 02, 2001 at 02:55 UTC
|
printf "%d days, %d hours, %d minutes and %d seconds\n",(gmtime 196364
+)[7,2,1,0];
But NB:
this only works for intervals less than one month.
tachyon's method (below) works for arbitrarily large values (within integer range; this could be fixed by using Math::BigInt).
| [reply] [d/l] |
Re: How do I convert seconds into a readable time?⭐
by tachyon (Chancellor) on Aug 02, 2001 at 04:39 UTC
|
I love IOs answer but in the spirit of TIMTOWDI here is how to roll your
own. This illustrates one of the uses for the modulus
operator:
my $sec = 196364;
print "days ", int($sec/(24*60*60)), "\n";
print "hours ", ($sec/(60*60))%24, "\n";
print "mins ", ($sec/60)%60, "\n";
print "secs ", $sec%60, "\n";
| [reply] [d/l] |
Re: How do I convert seconds into a readable time?
by Hofmator (Curate) on Aug 02, 2001 at 19:35 UTC
|
| [reply] |
Re: How do I convert seconds into a readable time?⭐
by Limbic~Region (Chancellor) on Aug 20, 2003 at 19:38 UTC
|
You could use Time::Duration. The question was intriguing enough to me to re-invent a wheel for the sake of learning.
Cheers - L~R | [reply] |
Re: How do I convert seconds into a readable time?
by toolic (Bishop) on Jan 16, 2010 at 01:50 UTC
|
If you only need an approximate answer, I'll invoke the "or something like that" clause and
change 196364 into '2.3d'
print sec2human(196364), "\n";
sub sec2human {
my $secs = shift;
if ($secs >= 365*24*60*60) { return sprintf '%.1fy', $secs/(365
+*24*60*60) }
elsif ($secs >= 24*60*60) { return sprintf '%.1fd', $secs/(
+ 24*60*60) }
elsif ($secs >= 60*60) { return sprintf '%.1fh', $secs/(
+ 60*60) }
elsif ($secs >= 60) { return sprintf '%.1fm', $secs/(
+ 60) }
else { return sprintf '%.1fs', $secs
+ }
}
| [reply] [d/l] |
Re: How do I convert seconds into a readable time?
by zen-japh (Initiate) on Aug 03, 2001 at 21:51 UTC
|
Here is a method of going back to seconds from
a string like "2 days, 6 hours, 32 minutes
and 44 seconds":
sub dhms2sec {
my $in = shift;
$in =~ s/(and|,)//g;
$in =~ s/(\w+)s/\1/g;
my %y = reverse split(/\s+/,$in);
return ($y{'second'}) +
($y{'minute'} * 60) +
($y{'hour'} * 60*60) +
($y{'day'} * 60*60*24);
}
| [reply] [d/l] |
|
The answer and question don't match.... The question is
"How do I convert seconds into a readable time?" but the
answer given converts readable time into seconds...
Q: How do I '$seconds => $string'??
A: Do this '$string => $seconds'!!
We should change one or the other to get them to match.
-Blake
Update After a bit more investigating, I decided
that this isn't really an issue. I thought it was the only answer given for the question. Since it is
more of a "thats cool, here's how you can do it backwards"
post,
my complaint isn't really valid. Feel free to remove
this node, mr reaper...
| [reply] |
Re: How do I convert seconds into a readable time?
by hossman (Prior) on Nov 01, 2005 at 20:02 UTC
|
| [reply] |
Re: How do I convert seconds into a readable time?
by Limbic~Region (Chancellor) on Aug 20, 2003 at 19:36 UTC
|
| [reply] |
Re: How do I convert seconds into a readable time?
by Anonymous Monk on Apr 11, 2004 at 08:41 UTC
|
| [reply] |
Re: How do I convert seconds into a readable time?
by Anonymous Monk on Oct 21, 2003 at 15:13 UTC
|
My version is slightly different, and does not quite work right. Could someone spot my mistake?
It's not written in perl, but the language is basic enough to be portable pretty much anywhere
function convertToTime(seconds)
var thex
var they
var thez
var mind
mind = Int(seconds)
thex = mind Mod 60
if thex = 0
thex = mind / 60
else
mind = (int(mind ) - int(thex))
end
they = mind Mod 3600
if they = 0
they = mind / 3600
else
mind = mind - they
end
thez = mind / 60
theTime = thez/60 + ":" + they/60 + ":" + thex
return theTime
end
| [reply] [d/l] |
|
sub dhms2s {
my $dhms = shift;
my @dinfo = split /d_|:/, $dhms;
my ($s, $m, $h, $d) = reverse @dinfo;
$d ||= 0;
$h ||= 0;
$m ||= 0;
return (
(( $d * 24 + $h ) * 60 + $m ) * 60 + $s
);
}
my $m = 60;
my $h = 60 * $m;
my $d = 24 * $h;
sub s2dhms {
my $secs = shift;
my $D = int($secs / $d); $secs = $secs - $D * $d;
my $H = int($secs / $h); $secs = $secs - $H * $h;
my $M = int($secs / $m); $secs = $secs - $M * $m;
my $S = $secs ;
my $r;
if ($D) {
$r .= sprintf "%dd_", $D;
}
if ( $S == int $S ) {
$r .= sprintf "%02d:%02d:%02d", $H, $M, $S;
} else {
$r .= sprintf "%02d:%02d:%05.2f", $H, $M, $S;
}
return $r;
}
| [reply] [d/l] |
Re: How do I convert seconds into a readable time?
by Anonymous Monk on Aug 20, 2003 at 19:15 UTC
|
| [reply] |
Re: How do I convert seconds into a readable time?
by Anonymous Monk on Mar 02, 2003 at 15:46 UTC
|
| [reply] |
A reply falls below the community's threshold of quality. You may see it by logging in. |