+#!/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