Big update of Clearadm
[clearscm.git] / test / testMDYHMS2SQLDatetime.pl
diff --git a/test/testMDYHMS2SQLDatetime.pl b/test/testMDYHMS2SQLDatetime.pl
new file mode 100755 (executable)
index 0000000..aef0e3b
--- /dev/null
@@ -0,0 +1,107 @@
+#!/usr/bin/env perl\r
+\r
+use strict;\r
+use warnings;\r
+\r
+use FindBin;\r
+use lib "$FindBin::Bin/../lib";\r
+\r
+use Display;\r
+use CmdLine;\r
+\r
+sub _is_leap_year($) {\r
+  my ($year) = @_;\r
+\r
+  return 0 if $year % 4;\r
+  return 1 if $year % 100;\r
+  return 0 if $year % 400;\r
+\r
+  return 1; \r
+} # _is_leap_year\r
+\r
+sub MDYHMS2SQLDatetime($) {\r
+  my ($datetime) = @_;\r
+\r
+  $datetime =~ s/^\s+|\s+$//g;\r
+\r
+  my ($year, $mon, $day, $hour, $min, $sec, $ampm);\r
+\r
+  # For datetime format of MM/DD/YYYY HH:MM:SS [Am|Pm]\r
+  if ($datetime =~ /^(\d{1,2})\/(\d{1,2})\/(\d{4}) (\d{1,2}):(\d{1,2}):(\d{1,2}) (\w{2})$/) {\r
+    $mon   = $1;\r
+    $day   = $2;\r
+    $year  = $3;\r
+    $hour  = $4;\r
+    $min   = $5;\r
+    $sec   = $6;\r
+    $ampm  = $7;\r
+  # For datetime format of MM/DD/YYYY HH:MM:SS\r
+  } elsif ($datetime =~ /^(\d{1,2})\/(\d{1,2})\/(\d{4}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/){\r
+    $mon   = $1;\r
+    $day   = $2;\r
+    $year  = $3;\r
+    $hour  = $4;\r
+    $min   = $5;\r
+    $sec   = $6;\r
+  # For datetime format of MM/DD/YYYY\r
+  } elsif ($datetime =~ /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/) {\r
+    $mon   = $1;\r
+    $day   = $2;\r
+    $year  = $3;\r
+    $hour  = '00';\r
+    $min   = '00';\r
+    $sec   = '00';\r
+  } else {\r
+    return\r
+  } # if\r
+\r
+  # Range checks\r
+  return if $mon  > 12 or $mon  <= 0;\r
+  return if $day  > 31 or $day  <= 0;\r
+  return if $hour > 23 or $hour <  0;\r
+  return if $min  > 59 or $min  <  0;\r
+\r
+  if ($day >= 31 and ($mon == 2\r
+                   or $mon == 4\r
+                   or $mon == 6\r
+                   or $mon == 9\r
+                   or $mon == 11)) {\r
+    return;\r
+  } # if\r
+\r
+  return if $day >  29 and  $mon == 2;\r
+  return if $day == 29 and  $mon == 2 and not _is_leap_year($year);\r
+\r
+  # Convert to 24 hour time if necessary\r
+  $hour += 12 if $ampm and $ampm =~ /pm/i;\r
+\r
+  # Add any leading zeros\r
+  $mon  = "0$mon"  if length $mon  == 1;\r
+  $day  = "0$day"  if length $day  == 1;\r
+  $hour = "0$hour" if length $hour == 1;\r
+  $min  = "0$min"  if length $min  == 1;\r
+  $sec  = "0$sec"  if length $sec  == 1;\r
+\r
+  return "$year-$mon-$day $hour:$min:$sec";\r
+} # MDYHMS2SQLDatetime\r
+\r
+local $| = 1;\r
+\r
+$CmdLine::cmdline->set_prompt('Enter datetime:');\r
+\r
+while () {\r
+  my $datetime = $CmdLine::cmdline->get;\r
+\r
+  last unless defined $datetime;\r
+  last if $datetime =~ /(exit|quit|e|q)/i;\r
+\r
+  if ($datetime) {\r
+    my $newdatetime = MDYHMS2SQLDatetime $datetime;\r
+\r
+    if ($newdatetime) {\r
+      display $newdatetime;\r
+    } else {\r
+      error "Date $datetime is invalid";\r
+    } # if\r
+  } # if\r
+} # while\r