tz-erl: Include month and day in future 'until' check.

This commit is contained in:
David Hull 2015-11-21 21:56:04 +00:00
parent b36ea2cec2
commit 031652afd4

View file

@ -258,9 +258,13 @@ sub zone_line {
# We ignore any zone line that has a definite until (end) time that
# is in the past.
if (defined $until) {
my $until_year = ($until =~ m/^(\d+)/)[0];
if ($until_year >= $current_year) {
die "until $until not handled";
my ($until_year, $until_month, $until_day) = split_ymd($until);
if (($until_year > $current_year) ||
(($until_year == $current_year) &&
(($until_month > $current_month) ||
(($until_month == $current_month) &&
($until_day >= $current_day))))) {
"future until \"$until\" not handled";
}
return;
}
@ -429,6 +433,23 @@ INIT {
%dow_from_name= map { $dow_to_name[$_] => $_ } (0..$#dow_to_name);
}
sub split_ymd {
my ($ymd) = @_;
$ymd =~ m/^(\d+)(?:\s+(\w+)(?:\s+(\d+)))?/
or die "parse \"$ymd\" for ymd failed";
my $year = $1;
my $month = do {
if (defined $2) {
defined $mon_from_name{$2} or die "parse \"$ymd\" for month failed";
$mon_from_name{$2};
} else {
0
}
};
my $day = defined $3 ? $3 : 0;
return ($year, $month, $day);
}
sub on_to_day_of_month {
my ($on, $year, $month) = @_;