blib/lib/Date/Time2fmtstr.pm | |||
---|---|---|---|
Criterion | Covered | Total | % |
statement | 9 | 114 | 7.8 |
branch | 0 | 46 | 0.0 |
condition | 0 | 26 | 0.0 |
subroutine | 3 | 48 | 6.2 |
pod | 1 | 1 | 100.0 |
total | 13 | 235 | 5.5 |
line | stmt | bran | cond | sub | pod | time | code |
---|---|---|---|---|---|---|---|
1 | =head1 NAME | ||||||
2 | |||||||
3 | Date::Time2fmtstr - Functions to format Perl time integers to strings based on a "Picture" format string. | ||||||
4 | |||||||
5 | =head1 AUTHOR | ||||||
6 | |||||||
7 | Jim Turner | ||||||
8 | |||||||
9 | (c) 2015, Jim Turner under the same license that Perl 5 itself is. All rights reserved. | ||||||
10 | |||||||
11 | =head1 SYNOPSIS | ||||||
12 | |||||||
13 | use Date::Time2fmtstr; | ||||||
14 | |||||||
15 | print time2str(time, 'mm-dd-yyyy hh:mi PM'); | ||||||
16 | |||||||
17 | =head1 DESCRIPTION | ||||||
18 | |||||||
19 | Date::Time2fmtstr provides a single function B |
||||||
20 | "time" value (a large integer equivalent to the number of seconds since 1980) and converts it | ||||||
21 | to a string value based on a I |
||||||
22 | the various parts of a date and time value. It returns a string that is essentially the | ||||||
23 | same as the original I |
||||||
24 | the corresponding date/time value. | ||||||
25 | |||||||
26 | =head1 METHODS | ||||||
27 | |||||||
28 | =over 4 | ||||||
29 | |||||||
30 | =item <$string> = B |
||||||
31 | |||||||
32 | Returns a string corresponding to the specified I |
||||||
33 | replaced with the corresponding date/time data field. For example: | ||||||
34 | |||||||
35 | $s = B |
||||||
36 | |||||||
37 | would set $s to '01-09-2016 01:20 AM (Sat) (January)'. | ||||||
38 | |||||||
39 | =item B |
||||||
40 | |||||||
41 | There are numerous choices of special format substrings which can be used in an infinite | ||||||
42 | number of combinations to produce the desired results. They are listed below: | ||||||
43 | |||||||
44 | =over 4 | ||||||
45 | |||||||
46 | B |
||||||
47 | |||||||
48 | B |
||||||
49 | |||||||
50 | B |
||||||
51 | |||||||
52 | B |
||||||
53 | |||||||
54 | B |
||||||
55 | |||||||
56 | B |
||||||
57 | |||||||
58 | B |
||||||
59 | |||||||
60 | B |
||||||
61 | |||||||
62 | B |
||||||
63 | |||||||
64 | B |
||||||
65 | |||||||
66 | B |
||||||
67 | |||||||
68 | B |
||||||
69 | |||||||
70 | B |
||||||
71 | |||||||
72 | B |
||||||
73 | |||||||
74 | B |
||||||
75 | |||||||
76 | B |
||||||
77 | |||||||
78 | B |
||||||
79 | |||||||
80 | B |
||||||
81 | |||||||
82 | B |
||||||
83 | |||||||
84 | B- Hour in common format, 1 or 2 digits, as needed, ie. 1-12. |
||||||
85 | |||||||
86 | B |
||||||
87 | |||||||
88 | B |
||||||
89 | |||||||
90 | B |
||||||
91 | |||||||
92 | B |
||||||
93 | |||||||
94 | B- Hour in 24-hour format, 1 or 2 digits, as needed, ie. 0-23. |
||||||
95 | |||||||
96 | B |
||||||
97 | |||||||
98 | B |
||||||
99 | |||||||
100 | B |
||||||
101 | |||||||
102 | B |
||||||
103 | |||||||
104 | B |
||||||
105 | |||||||
106 | B |
||||||
107 | |||||||
108 | B |
||||||
109 | |||||||
110 | B, B - display "a" if between Midnight and Noon, "p" otherwise (both specifiers are identical). |
||||||
111 | |||||||
112 | B, B - display "A" if between Midnight and Noon, "P" otherwise (both specifiers are identical). |
||||||
113 | |||||||
114 | B |
||||||
115 | |||||||
116 | B |
||||||
117 | |||||||
118 | B |
||||||
119 | |||||||
120 | B- Number of the quarter of the year - (1-4). |
||||||
121 | |||||||
122 | =back | ||||||
123 | |||||||
124 | =back | ||||||
125 | |||||||
126 | =head1 KEYWORDS | ||||||
127 | |||||||
128 | L |
||||||
129 | |||||||
130 | =cut | ||||||
131 | |||||||
132 | package Date::Time2fmtstr; | ||||||
133 | |||||||
134 | 1 | 1 | 23849 | use strict; | |||
1 | 2 | ||||||
1 | 36 | ||||||
135 | #use warnings; | ||||||
136 | 1 | 1 | 5 | use vars qw(@ISA @EXPORT $VERSION); | |||
1 | 2 | ||||||
1 | 288 | ||||||
137 | $VERSION = '1.01'; | ||||||
138 | |||||||
139 | require Exporter; | ||||||
140 | |||||||
141 | @ISA = qw(Exporter); | ||||||
142 | @EXPORT = qw(time2str); | ||||||
143 | |||||||
144 | my @inputs = (); | ||||||
145 | |||||||
146 | sub time2str | ||||||
147 | { | ||||||
148 | 0 | 0 | 0 | 1 | my $s = $_[0] || time; | ||
149 | 0 | 0 | my $f = $_[1] || 'yyyymmdd'; | ||||
150 | |||||||
151 | 0 | my @fmts = split(/\b/, $f); | |||||
152 | 0 | my @today = localtime(time); | |||||
153 | 0 | @inputs = localtime($s); | |||||
154 | 0 | my $resORerr = ''; | |||||
155 | 0 | my $rtnTime = ''; | |||||
156 | 0 | my $fn; | |||||
157 | |||||||
158 | 0 | OUTER1: for (my $i=0;$i<=$#fmts;$i++) | |||||
159 | { | ||||||
160 | 0 | 0 | if ($fmts[$i] =~ /\W/o) | ||||
161 | { | ||||||
162 | 0 | $resORerr .= $fmts[$i]; | |||||
163 | 0 | next; | |||||
164 | } | ||||||
165 | 0 | MIDDLE1: while ($fmts[$i] =~ /\w/o) | |||||
166 | { | ||||||
167 | 0 | foreach my $f (qw(month Month MONTH dayofweek Dayofweek DAYOFWEEK day Day DAY | |||||
168 | ddd dd d1 d0 yyyymmdd yyyy yy hh24 hh HH H1 h1 mi mm mon | ||||||
169 | Mon MON m1 sssss ss am pm AM PM a p A P rm RM rr d ww q)) | ||||||
170 | { | ||||||
171 | 0 | 0 | if ($fmts[$i] =~ s/^$f//) | ||||
172 | { | ||||||
173 | 0 | $fn = '_toc_'.$f; | |||||
174 | 1 | 1 | 5 | no strict 'refs'; | |||
1 | 6 | ||||||
1 | 1555 | ||||||
175 | 0 | $resORerr .= &$fn(); | |||||
176 | 0 | next MIDDLE1; | |||||
177 | } | ||||||
178 | } | ||||||
179 | 0 | 0 | if ($fmts[$i] =~ s/^(\w)(\w+)$/$2/) | ||||
180 | { | ||||||
181 | 0 | $resORerr .= $1; | |||||
182 | 0 | next MIDDLE1; | |||||
183 | } | ||||||
184 | 0 | $resORerr .= $fmts[$i]; | |||||
185 | 0 | next OUTER1; | |||||
186 | } | ||||||
187 | } | ||||||
188 | |||||||
189 | 0 | return $resORerr; | |||||
190 | } | ||||||
191 | |||||||
192 | sub _toc_month | ||||||
193 | { | ||||||
194 | 0 | 0 | my @mthlist = (qw(january february march april may june july august september | ||||
195 | october november december)); | ||||||
196 | |||||||
197 | 0 | 0 | 0 | return "Invalid Month ($inputs[4])! " unless ($inputs[4] >= 0 && $inputs[4] < 12); | |||
198 | 0 | return $mthlist[$inputs[4]]; | |||||
199 | } | ||||||
200 | |||||||
201 | sub _toc_Month | ||||||
202 | { | ||||||
203 | 0 | 0 | my $mymonth = &_toc_month(); | ||||
204 | 0 | return "\u\L$mymonth\E" | |||||
205 | } | ||||||
206 | |||||||
207 | sub _toc_MONTH | ||||||
208 | { | ||||||
209 | 0 | 0 | my $mymonth = &_toc_month(); | ||||
210 | 0 | return "\U$mymonth\E"; | |||||
211 | } | ||||||
212 | |||||||
213 | sub _toc_mon | ||||||
214 | { | ||||||
215 | 0 | 0 | my @mthlist = (qw(jan feb mar apr may jun jul aug sep oct nov dec)); | ||||
216 | |||||||
217 | 0 | 0 | 0 | return "Invalid Month ($inputs[4])! " unless ($inputs[4] >= 0 && $inputs[4] < 12); | |||
218 | 0 | return $mthlist[$inputs[4]]; | |||||
219 | } | ||||||
220 | |||||||
221 | sub _toc_Mon | ||||||
222 | { | ||||||
223 | 0 | 0 | my $mymonth = &_toc_mon(); | ||||
224 | 0 | return "\u\L$mymonth\E"; | |||||
225 | } | ||||||
226 | |||||||
227 | sub _toc_MON | ||||||
228 | { | ||||||
229 | 0 | 0 | my $mymonth = &_toc_mon(); | ||||
230 | 0 | return "\U$mymonth\E"; | |||||
231 | } | ||||||
232 | |||||||
233 | sub _toc_rm #ROMAN NUMBER MONTH - LOWER CASE | ||||||
234 | { | ||||||
235 | 0 | 0 | my @mthlist = (qw(i ii iii iv v vi vii viii ix x xi xii)); | ||||
236 | |||||||
237 | 0 | 0 | 0 | return "Invalid Month ($inputs[4])! " unless ($inputs[4] >= 0 && $inputs[4] < 12); | |||
238 | 0 | return $mthlist[$inputs[4]]; | |||||
239 | } | ||||||
240 | |||||||
241 | sub _toc_RM #ROMAN NUMBER MONTH - UPPER CASE | ||||||
242 | { | ||||||
243 | 0 | 0 | my $mymonth = &_toc_rm(); | ||||
244 | 0 | return "\U$mymonth\E"; | |||||
245 | } | ||||||
246 | |||||||
247 | sub _toc_mm #MONTH (01-12) | ||||||
248 | { | ||||||
249 | 0 | 0 | my $mymth = $inputs[4] + 1; | ||||
250 | 0 | 0 | 0 | return "Invalid Month ($mymth)! " unless ($mymth >= 1 && $mymth <= 12); | |||
251 | 0 | 0 | return '0'.$mymth if ($mymth < 10); | ||||
252 | 0 | return $mymth; | |||||
253 | } | ||||||
254 | |||||||
255 | sub _toc_m1 #MONTH (1-12) | ||||||
256 | { | ||||||
257 | 0 | 0 | my $mymth = $inputs[4] + 1; | ||||
258 | 0 | 0 | 0 | return "Invalid Month ($mymth)! " unless ($mymth >= 1 && $mymth <= 12); | |||
259 | 0 | return $mymth; | |||||
260 | } | ||||||
261 | |||||||
262 | sub _toc_yyyymmdd | ||||||
263 | { | ||||||
264 | 0 | 0 | return &_toc_yyyy() . &_toc_mm() . &_toc_dd(); | ||||
265 | } | ||||||
266 | |||||||
267 | sub _toc_yyyy #4-DIGIT YEAR | ||||||
268 | { | ||||||
269 | 0 | 0 | return $inputs[5] + 1900; | ||||
270 | } | ||||||
271 | |||||||
272 | sub _toc_yy | ||||||
273 | { | ||||||
274 | 0 | 0 | my $myyr = $inputs[5]; | ||||
275 | 0 | 0 | return '0'.$myyr if ($myyr < 10); | ||||
276 | 0 | return $myyr; | |||||
277 | } | ||||||
278 | |||||||
279 | sub _toc_rr | ||||||
280 | { | ||||||
281 | 0 | 0 | return &_toc_yy(); | ||||
282 | } | ||||||
283 | |||||||
284 | sub _toc_rrrr | ||||||
285 | { | ||||||
286 | 0 | 0 | return &_toc_yyyy(); | ||||
287 | } | ||||||
288 | |||||||
289 | sub _toc_ddd #DAY OF YEAR (1-365) | ||||||
290 | { | ||||||
291 | 0 | 0 | return $inputs[7] + 1; | ||||
292 | } | ||||||
293 | |||||||
294 | sub _toc_dd #DAY OF MONTH (01-31) | ||||||
295 | { | ||||||
296 | 0 | 0 | 0 | return '0'.$inputs[3] if ($inputs[3] < 10); | |||
297 | 0 | return $inputs[3]; | |||||
298 | } | ||||||
299 | |||||||
300 | sub _toc_d1 #DAY OF MONTH (1-31) | ||||||
301 | { | ||||||
302 | 0 | 0 | return $inputs[3]; | ||||
303 | } | ||||||
304 | |||||||
305 | sub _toc_hh24 #24-HOUR MILITARY TIME (0000-2359): | ||||||
306 | { | ||||||
307 | 0 | 0 | return sprintf('%4.4d', ($inputs[2] * 100) + $inputs[1]); | ||||
308 | } | ||||||
309 | |||||||
310 | sub _toc_HH #HOUR (00-23) | ||||||
311 | { | ||||||
312 | 0 | 0 | 0 | return '0'.$inputs[2] if ($inputs[2] < 10); | |||
313 | 0 | return $inputs[2]; | |||||
314 | } | ||||||
315 | |||||||
316 | sub _toc_H1 #HOUR (0-23) | ||||||
317 | { | ||||||
318 | 0 | 0 | return $inputs[2]; | ||||
319 | } | ||||||
320 | |||||||
321 | sub _toc_hh #HOUR (01-12) | ||||||
322 | { | ||||||
323 | 0 | 0 | my $hr = $inputs[2]; | ||||
324 | 0 | 0 | return 12 unless ($hr); | ||||
325 | 0 | 0 | $hr -= 12 if ($hr > 12); | ||||
326 | 0 | 0 | return '0'.$hr if ($hr < 10); | ||||
327 | 0 | return $hr; | |||||
328 | } | ||||||
329 | |||||||
330 | sub _toc_h1 #HOUR (1-12) | ||||||
331 | { | ||||||
332 | 0 | 0 | my $hr = $inputs[2]; | ||||
333 | 0 | 0 | return 12 unless ($hr); | ||||
334 | 0 | 0 | $hr -= 12 if ($hr > 12); | ||||
335 | 0 | return $hr; | |||||
336 | } | ||||||
337 | |||||||
338 | sub _toc_a | ||||||
339 | { | ||||||
340 | 0 | 0 | 0 | return ($inputs[2] < 12) ? 'a' : 'p'; | |||
341 | } | ||||||
342 | |||||||
343 | sub _toc_p | ||||||
344 | { | ||||||
345 | 0 | 0 | return &_toc_a(); | ||||
346 | } | ||||||
347 | |||||||
348 | sub _toc_A | ||||||
349 | { | ||||||
350 | 0 | 0 | 0 | return ($inputs[2] < 12) ? 'A' : 'P'; | |||
351 | } | ||||||
352 | |||||||
353 | sub _toc_P | ||||||
354 | { | ||||||
355 | 0 | 0 | return &_toc_A(); | ||||
356 | } | ||||||
357 | |||||||
358 | sub _toc_am | ||||||
359 | { | ||||||
360 | 0 | 0 | return &_toc_a() . 'm'; | ||||
361 | } | ||||||
362 | |||||||
363 | sub _toc_pm | ||||||
364 | { | ||||||
365 | 0 | 0 | return &_toc_a() . 'm'; | ||||
366 | } | ||||||
367 | |||||||
368 | sub _toc_AM | ||||||
369 | { | ||||||
370 | 0 | 0 | return &_toc_A() . 'M'; | ||||
371 | } | ||||||
372 | |||||||
373 | sub _toc_PM | ||||||
374 | { | ||||||
375 | 0 | 0 | return &_toc_A() . 'M'; | ||||
376 | } | ||||||
377 | |||||||
378 | sub _toc_mi #MINUTES (00-59) | ||||||
379 | { | ||||||
380 | 0 | 0 | 0 | return '0'.$inputs[1] if ($inputs[1] < 10); | |||
381 | 0 | return $inputs[1]; | |||||
382 | } | ||||||
383 | |||||||
384 | sub _toc_sssss #SECONDS OF THE DAY (0-86399) | ||||||
385 | { | ||||||
386 | 0 | 0 | return sprintf('%5.5d', (($inputs[2]*3600)+($inputs[1]*60)+$inputs[0])); | ||||
387 | } | ||||||
388 | |||||||
389 | sub _toc_ss #SECONDS | ||||||
390 | { | ||||||
391 | 0 | 0 | 0 | return '0'.$inputs[0] if ($inputs[0] < 10); | |||
392 | 0 | return $inputs[0]; | |||||
393 | } | ||||||
394 | |||||||
395 | sub _toc_d #DAY OF WEEK (SUN=1..SAT=7 | ||||||
396 | { | ||||||
397 | 0 | 0 | return $inputs[6] + 1; | ||||
398 | } | ||||||
399 | |||||||
400 | sub _toc_d0 #DAY OF WEEK (SUN=0..SAT=6 | ||||||
401 | { | ||||||
402 | 0 | 0 | return $inputs[6]; | ||||
403 | } | ||||||
404 | |||||||
405 | sub _toc_day | ||||||
406 | { | ||||||
407 | 0 | 0 | my @daylist = (qw(sun mon tue wed thu fri sat)); | ||||
408 | |||||||
409 | 0 | 0 | 0 | return "Invalid Day ($inputs[6])! " unless ($inputs[6] >= 0 && $inputs[6] < 7); | |||
410 | 0 | return $daylist[$inputs[6]]; | |||||
411 | } | ||||||
412 | |||||||
413 | sub _toc_Day | ||||||
414 | { | ||||||
415 | 0 | 0 | my $myday = &_toc_day(); | ||||
416 | 0 | return "\u\L$myday\E"; | |||||
417 | } | ||||||
418 | |||||||
419 | sub _toc_DAY | ||||||
420 | { | ||||||
421 | 0 | 0 | my $myday = &_toc_day(); | ||||
422 | 0 | return "\U$myday\E"; | |||||
423 | } | ||||||
424 | |||||||
425 | sub _toc_dayofweek | ||||||
426 | { | ||||||
427 | 0 | 0 | my @daylist = (qw(sunday monday tuesday wednesday thursday friday saturday)); | ||||
428 | |||||||
429 | 0 | 0 | 0 | return "Invalid Day ($inputs[6])! " unless ($inputs[6] >= 0 && $inputs[6] < 7); | |||
430 | 0 | return $daylist[$inputs[6]]; | |||||
431 | } | ||||||
432 | |||||||
433 | sub _toc_Dayofweek | ||||||
434 | { | ||||||
435 | 0 | 0 | my $myday = &_toc_dayofweek(); | ||||
436 | 0 | return "\u\L$myday\E"; | |||||
437 | } | ||||||
438 | |||||||
439 | sub _toc_DAYOFWEEK | ||||||
440 | { | ||||||
441 | 0 | 0 | my $myday = &_toc_dayofweek(); | ||||
442 | 0 | return "\U$myday\E"; | |||||
443 | } | ||||||
444 | |||||||
445 | sub _toc_ww #WEEK OF YEAR (0-51) | ||||||
446 | { | ||||||
447 | 0 | 0 | return &_toc_ddd % 7; | ||||
448 | } | ||||||
449 | |||||||
450 | sub _toc_q #QUARTER (1-4): | ||||||
451 | { | ||||||
452 | 0 | 0 | return int(&_toc_mm / 4) + 1; | ||||
453 | } | ||||||
454 | |||||||
455 | 1 | ||||||
456 | |||||||
457 | __END__ |