adding an ISO timestamp builder
[Evergreen.git] / OpenSRF / src / perlmods / OpenSRF / Utils.pm
index af9e3b9..55092e7 100644 (file)
@@ -36,7 +36,7 @@ use Exporter;
 %EXPORT_TAGS = (
        common          => [qw(interval_to_seconds seconds_to_interval sendmail)],
        daemon          => [qw(safe_fork set_psname daemonize)],
-       datetime        => [qw(clense_ISO8601 interval_to_seconds seconds_to_interval)],
+       datetime        => [qw(clense_ISO8601 gmtime_ISO8601 interval_to_seconds seconds_to_interval)],
 );
 
 Exporter::export_ok_tags('common','daemon','datetime');  # add aa, cc and dd to @EXPORT_OK
@@ -241,13 +241,13 @@ sub interval_to_seconds {
         $interval =~ s/,/ /g;
 
         my $amount = 0;
-        while ($interval =~ /\s*\+?\s*(\d+)\s*(\w{1})\w*\s*/g) {
-                $amount += $1 if ($2 eq 's');
-                $amount += 60 * $1 if ($2 eq 'm');
-                $amount += 60 * 60 * $1 if ($2 eq 'h');
-                $amount += 60 * 60 * 24 * $1 if ($2 eq 'd');
-                $amount += 60 * 60 * 24 * 7 * $1 if ($2 eq 'w');
-                $amount += ((60 * 60 * 24 * 365)/12) * $1 if ($2 eq 'M');
+        while ($interval =~ /\s*\+?\s*(\d+)\s*((\w{1})\w*)\s*/g) {
+                $amount += $1 if ($3 eq 's');
+                $amount += 60 * $1 if ($3 eq 'm' || $2 =~ /^mi/io);
+                $amount += 60 * 60 * $1 if ($3 eq 'h');
+                $amount += 60 * 60 * 24 * $1 if ($3 eq 'd');
+                $amount += 60 * 60 * 24 * 7 * $1 if ($3 eq 'w');
+                $amount += ((60 * 60 * 24 * 365)/12) * $1 if ($3 eq 'M' || $2 =~ /^mo/io);
                 $amount += 60 * 60 * 24 * 365 * $1 if ($2 eq 'y');
         }
         return $amount;
@@ -338,10 +338,24 @@ sub set_psname {
        $0 = $PS_NAME if ($PS_NAME);
 }
 
+sub gmtime_ISO8601 {
+       my $self = shift;
+       my @date = gmtime;
+
+       my $y = $date[5] + 1900;
+       my $M = $date[4] + 1;
+       my $d = $date[3];
+       my $h = $date[2];
+       my $m = $date[1];
+       my $s = $date[0];
+
+       return sprintf('%d-%0.2d-%0.2dT%0.2d:%0.2d:%0.2d+00:00', $y, $M, $d, $h, $m, $s);
+}
+
 sub clense_ISO8601 {
        my $self = shift;
        my $date = shift || $self;
-       if ($date =~ /(\d{4})-?(\d{2})-?(\d{2}).?(\d{2}):(\d{2}):(\d{2})\.?\d*((?:-|\+)[0-9:]{2,5})?$/) {
+       if ($date =~ /^\s*(\d{4})-?(\d{2})-?(\d{2}).?(\d{2}):(\d{2}):(\d{2})\.?\d*((?:-|\+)[0-9:]{2,5})?\s*$/o) {
                my $z = $7 || '+00:00';
                if (length($z) > 3 && $z !~ /:/o) {
                        substr($z,3,0,':');