Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | |
2 | package Date::Language; | |
3 | ||
4 | use strict; | |
5 | use Time::Local; | |
6 | use Carp; | |
7 | use vars qw($VERSION @ISA); | |
8 | require Date::Format; | |
9 | ||
10 | $VERSION = "1.10"; | |
11 | @ISA = qw(Date::Format::Generic); | |
12 | ||
13 | sub 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 ;-) | |
30 | sub DESTROY {} | |
31 | ||
32 | sub 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 | ||
55 | sub 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 | ||
83 | 1; |