1 2package Date::Language; 3 4use strict; 5use Time::Local; 6use Carp; 7use vars qw($VERSION @ISA); 8require Date::Format; 9 10$VERSION = "1.10"; 11@ISA = qw(Date::Format::Generic); 12 13sub new 14{ 15 my $self = shift; 16 my $type = shift || $self; 17 18 $type =~ s/^(\w+)$/Date::Language::$1/; 19 20 croak "Bad language" 21 unless $type =~ /^[\w:]+$/; 22 23 eval "require $type" 24 or croak $@; 25 26 bless [], $type; 27} 28 29# Stop AUTOLOAD being called ;-) 30sub DESTROY {} 31 32sub AUTOLOAD 33{ 34 use vars qw($AUTOLOAD); 35 36 if($AUTOLOAD =~ /::strptime\Z/o) 37 { 38 my $self = $_[0]; 39 my $type = ref($self) || $self; 40 require Date::Parse; 41 42 no strict 'refs'; 43 *{"${type}::strptime"} = Date::Parse::gen_parser( 44 \%{"${type}::DoW"}, 45 \%{"${type}::MoY"}, 46 \@{"${type}::Dsuf"}, 47 1); 48 49 goto &{"${type}::strptime"}; 50 } 51 52 croak "Undefined method &$AUTOLOAD called"; 53} 54 55sub str2time 56{ 57 my $me = shift; 58 my @t = $me->strptime(@_); 59 60 return undef 61 unless @t; 62 63 my($ss,$mm,$hh,$day,$month,$year,$zone) = @t; 64 my @lt = localtime(time); 65 66 $hh ||= 0; 67 $mm ||= 0; 68 $ss ||= 0; 69 70 $month = $lt[4] 71 unless(defined $month); 72 73 $day = $lt[3] 74 unless(defined $day); 75 76 $year = ($month > $lt[4]) ? ($lt[5] - 1) : $lt[5] 77 unless(defined $year); 78 79 return defined $zone ? timegm($ss,$mm,$hh,$day,$month,$year) - $zone 80 : timelocal($ss,$mm,$hh,$day,$month,$year); 81} 82 831; 84