X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=blobdiff_plain;f=src%2FPVE%2FCalendarEvent.pm;h=3c08eb06899d2f2134eee74f84a6239df802353c;hp=b27e9684e23a067b0602f2473336240425928c44;hb=e97f807c388c10250f442b1f16c5315df2ffc2af;hpb=a5ffa49fda3a66316cc0b026a18eb64cf5093c25 diff --git a/src/PVE/CalendarEvent.pm b/src/PVE/CalendarEvent.pm index b27e968..3c08eb0 100644 --- a/src/PVE/CalendarEvent.pm +++ b/src/PVE/CalendarEvent.pm @@ -27,7 +27,7 @@ sub pve_verify_calendar_event { eval { parse_calendar_event($text); }; if (my $err = $@) { return undef if $noerr; - die "invalid calendar event '$text'\n"; + die "invalid calendar event '$text' - $err\n"; } return $text; } @@ -128,8 +128,12 @@ sub parse_calendar_event { if ($time_spec =~ m/^($chars+):($chars+)$/) { my ($p1, $p2) = ($1, $2); - $parse_single_timespec->($p1, 24, \$matchall_hours, $hours_hash); - $parse_single_timespec->($p2, 60, \$matchall_minutes, $minutes_hash); + foreach my $p (split(',', $p1)) { + $parse_single_timespec->($p, 24, \$matchall_hours, $hours_hash); + } + foreach my $p (split(',', $p2)) { + $parse_single_timespec->($p, 60, \$matchall_minutes, $minutes_hash); + } } elsif ($time_spec =~ m/^($chars)+$/) { # minutes only $matchall_hours = 1; foreach my $p (split(',', $time_spec)) { @@ -173,9 +177,13 @@ sub compute_next_event { if ($utc) { (undef, $min, $hour, $mday, $mon, $year, $wday) = gmtime($last); + # gmtime and timegm interpret two-digit years differently + $year += 1900; $startofday = timegm(0, 0, 0, $mday, $mon, $year); } else { (undef, $min, $hour, $mday, $mon, $year, $wday) = localtime($last); + # localtime and timelocal interpret two-digit years differently + $year += 1900; $startofday = timelocal(0, 0, 0, $mday, $mon, $year); }