Removed /usr/local from CDPATH
[clearscm.git] / test / testMDYHMS2SQLDatetime.pl
1 #!/usr/bin/env perl\r
2 \r
3 use strict;\r
4 use warnings;\r
5 \r
6 use FindBin;\r
7 use lib "$FindBin::Bin/../lib";\r
8 \r
9 use Display;\r
10 use CmdLine;\r
11 \r
12 sub _is_leap_year($) {\r
13   my ($year) = @_;\r
14 \r
15   return 0 if $year % 4;\r
16   return 1 if $year % 100;\r
17   return 0 if $year % 400;\r
18 \r
19   return 1; \r
20 } # _is_leap_year\r
21 \r
22 sub MDYHMS2SQLDatetime($) {\r
23   my ($datetime) = @_;\r
24 \r
25   $datetime =~ s/^\s+|\s+$//g;\r
26 \r
27   my ($year, $mon, $day, $hour, $min, $sec, $ampm);\r
28 \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
31     $mon   = $1;\r
32     $day   = $2;\r
33     $year  = $3;\r
34     $hour  = $4;\r
35     $min   = $5;\r
36     $sec   = $6;\r
37     $ampm  = $7;\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
40     $mon   = $1;\r
41     $day   = $2;\r
42     $year  = $3;\r
43     $hour  = $4;\r
44     $min   = $5;\r
45     $sec   = $6;\r
46   # For datetime format of MM/DD/YYYY\r
47   } elsif ($datetime =~ /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/) {\r
48     $mon   = $1;\r
49     $day   = $2;\r
50     $year  = $3;\r
51     $hour  = '00';\r
52     $min   = '00';\r
53     $sec   = '00';\r
54   } else {\r
55     return\r
56   } # if\r
57 \r
58   # Range checks\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
63 \r
64   if ($day >= 31 and ($mon == 2\r
65                    or $mon == 4\r
66                    or $mon == 6\r
67                    or $mon == 9\r
68                    or $mon == 11)) {\r
69     return;\r
70   } # if\r
71 \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
74 \r
75   # Convert to 24 hour time if necessary\r
76   $hour += 12 if $ampm and $ampm =~ /pm/i;\r
77 \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
84 \r
85   return "$year-$mon-$day $hour:$min:$sec";\r
86 } # MDYHMS2SQLDatetime\r
87 \r
88 local $| = 1;\r
89 \r
90 $CmdLine::cmdline->set_prompt('Enter datetime:');\r
91 \r
92 while () {\r
93   my $datetime = $CmdLine::cmdline->get;\r
94 \r
95   last unless defined $datetime;\r
96   last if $datetime =~ /(exit|quit|e|q)/i;\r
97 \r
98   if ($datetime) {\r
99     my $newdatetime = MDYHMS2SQLDatetime $datetime;\r
100 \r
101     if ($newdatetime) {\r
102       display $newdatetime;\r
103     } else {\r
104       error "Date $datetime is invalid";\r
105     } # if\r
106   } # if\r
107 } # while\r