| Time-Concise documentation | Contained in the Time-Concise distribution. |
Time::Concise - Convert to and from concise duration formats.
use Time::Concise; my $seconds = from_concise "5y4d3h2m1s"; # 158141171 my $concise = to_concise 158141171; # 5y4d3h2m1s
Time::Concise exports two functions by default, from_concise and
to_concise.
The term concise was borrowed from Time::Duration.
The format is an integer followed immediatley by its duration identifier. White-space will be ignored.
The following table explains the format.
identifier duration
---------- --------
y year
d day
h hour
m minute
s second
This function requires one argument, an integer number of seconds, and returns a concise string representation of the duration.
If the input is not an integer this function returns undef.
This function requires one argument, a concise string representation of the duration, and returns the number of seconds in the duration.
If the concise string contains characters outside those represented
in a concise duration string this function will return undef.
Time::Duration, Time::Seconds, perl.
Casey West, <casey@geeknest.com>.
Copyright (c) 2004 Casey West. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| Time-Concise documentation | Contained in the Time-Concise distribution. |
package Time::Concise; # $Id: Concise.pm,v 1.1 2004/01/05 20:35:42 cwest Exp $ use strict; require Exporter; use vars qw[$VERSION @ISA @EXPORT %CONVERT @CONVERT $CONVERT]; $VERSION = (qw$Revision: 1.1 $)[1]; @ISA = qw[Exporter]; @EXPORT = qw[to_concise from_concise];
@CONVERT = qw[y d h m s]; $CONVERT = join '', @CONVERT; %CONVERT = ( y => 31_556_930, d => 86_400, h => 3_600, m => 60, s => 1, );
sub to_concise($;) { my ($seconds) = @_; return undef if $seconds =~ /\D/; my $string = ''; foreach my $type ( @CONVERT ) { my $leftover = $seconds % $CONVERT{$type}; my $amount = ( $seconds - $leftover ) / $CONVERT{$type}; $string .= "$amount$type" if $amount; $seconds = $leftover; } return $string; }
sub from_concise($;) { my ($string) = @_; return undef if $string =~ /[^${CONVERT}0-9 ]/o; my $seconds = 0; foreach my $type ( @CONVERT ) { if ( my ($amount) = ( $string =~ /(\d+)$type/ ) ) { $seconds += $amount * $CONVERT{$type}; } } return $seconds; }
1; __END__