7 use lib "$FindBin::Bin/../lib";
\r
12 sub _is_leap_year($) {
\r
15 return 0 if $year % 4;
\r
16 return 1 if $year % 100;
\r
17 return 0 if $year % 400;
\r
22 sub MDYHMS2SQLDatetime($) {
\r
23 my ($datetime) = @_;
\r
25 $datetime =~ s/^\s+|\s+$//g;
\r
27 my ($year, $mon, $day, $hour, $min, $sec, $ampm);
\r
29 # For datetime format of MM/DD/YYYY HH:MM:SS [Am|Pm]
\r
30 if ($datetime =~ /^(\d{1,2})\/(\d{1,2})\/(\d{4}) (\d{1,2}):(\d{1,2}):(\d{1,2}) (\w{2})$/) {
\r
38 # For datetime format of MM/DD/YYYY HH:MM:SS
\r
39 } elsif ($datetime =~ /^(\d{1,2})\/(\d{1,2})\/(\d{4}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/){
\r
46 # For datetime format of MM/DD/YYYY
\r
47 } elsif ($datetime =~ /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/) {
\r
59 return if $mon > 12 or $mon <= 0;
\r
60 return if $day > 31 or $day <= 0;
\r
61 return if $hour > 23 or $hour < 0;
\r
62 return if $min > 59 or $min < 0;
\r
64 if ($day >= 31 and ($mon == 2
\r
72 return if $day > 29 and $mon == 2;
\r
73 return if $day == 29 and $mon == 2 and not _is_leap_year($year);
\r
75 # Convert to 24 hour time if necessary
\r
76 $hour += 12 if $ampm and $ampm =~ /pm/i;
\r
78 # Add any leading zeros
\r
79 $mon = "0$mon" if length $mon == 1;
\r
80 $day = "0$day" if length $day == 1;
\r
81 $hour = "0$hour" if length $hour == 1;
\r
82 $min = "0$min" if length $min == 1;
\r
83 $sec = "0$sec" if length $sec == 1;
\r
85 return "$year-$mon-$day $hour:$min:$sec";
\r
86 } # MDYHMS2SQLDatetime
\r
90 $CmdLine::cmdline->set_prompt('Enter datetime:');
\r
93 my $datetime = $CmdLine::cmdline->get;
\r
95 last unless defined $datetime;
\r
96 last if $datetime =~ /(exit|quit|e|q)/i;
\r
99 my $newdatetime = MDYHMS2SQLDatetime $datetime;
\r
101 if ($newdatetime) {
\r
102 display $newdatetime;
\r
104 error "Date $datetime is invalid";
\r