And the output -#!/usr/local/bin/perl -w use strict; use warnings; # $time = str2time($date); my @date = ( 'Apr 8 1984', 'apr 08 84', '4/8/84', '04/08/84', '08 Apr 1984', 'April 8 1984', '8 april 1984'); my @months = qw/ January February March April May June July August September October November December /; # build month name lookup hash my %months = map { ($months[$_] => $_, substr($months[$_], 0, 3) => $_) } 0..9; foreach (@date) { my ($year, $month, $day) = parse_date($_); printf "%s %d %d\n", $months[$month], $day, $year; } sub parse_date { my $date_str = shift; my ($year, $month, $day); if ($date_str =~ /\//) { # validate date string die "Invalid date format" if $date_str !~ /[\/0..9]/; # in mm/dd/[cc]yy format ($month, $day, $year) = split /\//, $date_str; # normalization $year = normalize_year($year); $month -= 1; # zero based month, get rid of leading 0 $day += 0; # get rid of leading 0 } else { # in alpha month, numeric day format ($month, $day, $year) = split /\s+/, $date_str; # normalization $year = normalize_year($year); ($month, $day) = ($day, $month) if $month =~ /\d/; $day += 0; $month = ucfirst $month; die "Invalid month" if !exists $months{$month}; $month = $months{$month}; } return ($year, $month, $day); } sub normalize_year { my $year = shift; return length($year) == 2 ? $year > 30 ? $year + 1900 : $year + 2000 : $year; }
April 8 1984 April 8 1984 April 8 1984 April 8 1984 April 8 1984 April 8 1984 April 8 1984
In reply to Re: Final date conversion happiness script
by Roger
in thread Final date conversion happiness script
by ctp
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |