#!/bin/sh exec ${PERL-perl} -Swx $0 ${1+"$@"} #!perl # elapsed --- print elapsed time # Author: Noah Friedman # Created: 2003-08-08 # Public domain. # $Id: elapsed,v 1.1 2003/08/09 00:45:56 friedman Exp $ # Commentary: # $ elapsed 1713607 # 19 days, 20 hours, 7 seconds # # $ elapsed 106037343 1060388175 # 30 years, 3 months, 5 days, 17 hours, 27 minutes, 12 seconds # Code: use strict; # One month is considered 30 days. # One year is considered 365 days. my @time_mult = (31536000, 2592000, 86400, 3600, 60, 1); my @time_name = ("year", "month", "day", "hour", "minute", "second"); sub duration { my $sec = shift; my $output = ""; for (my $i = 0; $i < @time_mult; $i++) { my $val = int ($sec / $time_mult[$i]); $sec -= $val * $time_mult[$i]; if ($val || ($output eq "" && $i == $#time_mult)) { $output .= ", " unless $output eq ""; $output .= "$val $time_name[$i]"; $output .= "s" if ($val != 1); } } return $output; } sub main { if (@ARGV == 2) { print duration ($ARGV[1] - $ARGV[0]), "\n"; } elsif (@ARGV == 1) { print duration ($ARGV[0]), "\n"; } else { print STDERR "Usage: elapsed [s1] [s2] where t2 > t1\n"; print STDERR " elapsed [seconds]\n"; exit (1); } } main (); # local variables: # mode: perl # end: