adding an ISO timestamp builder
[Evergreen.git] / OpenSRF / src / perlmods / OpenSRF / Utils.pm
index f24d7d7..55092e7 100644 (file)
@@ -33,9 +33,13 @@ use Exporter;
 # This turns errors into warnings, so daemons don't die.
 #$Storable::forgive_me = 1;
 
-%EXPORT_TAGS = (common => [qw(interval_to_seconds seconds_to_interval sendmail)], daemon => [qw(safe_fork set_psname daemonize)]);
+%EXPORT_TAGS = (
+       common          => [qw(interval_to_seconds seconds_to_interval sendmail)],
+       daemon          => [qw(safe_fork set_psname daemonize)],
+       datetime        => [qw(clense_ISO8601 gmtime_ISO8601 interval_to_seconds seconds_to_interval)],
+);
 
-Exporter::export_ok_tags('common','daemon');  # add aa, cc and dd to @EXPORT_OK
+Exporter::export_ok_tags('common','daemon','datetime');  # add aa, cc and dd to @EXPORT_OK
 
 sub AUTOLOAD {
        my $self = shift;
@@ -237,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;
@@ -311,7 +315,7 @@ sub seconds_to_interval {
         if ($s = int($mm)) {
                 $string .= ($string ? ', ':'')."$s $second". ($s > 1 ? 's' : '');
         } else {
-                $string = "Brand New!!!" unless ($string);
+                $string = "0s" unless ($string);
         }
         return $string;
 }
@@ -334,6 +338,33 @@ 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 =~ /^\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,':');
+               }
+               $date = "$1-$2-$3T$4:$5:$6$z";
+       }
+       return $date;
+}
+
 =head2 $utils_obj->daemonize('ps_name') OR daemonize('ps_name')
 
 Turns the current process into a daemon.  B<ps_name> is optional, and is used