tz-erl: Include month and day in future 'until' check.
This commit is contained in:
parent
b36ea2cec2
commit
031652afd4
1 changed files with 24 additions and 3 deletions
27
db/tz-erl
27
db/tz-erl
|
@ -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) = @_;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue