Joshua Hoblitt said: > There must be a way to express the same semantic > meaning with fewer lines of code
A slightly smaller version - specify days and hours in the same constructor. - Flavio S. Glock --- #!/usr/local/bin/perl -w use strict; use DateTime; use DateTime::Span; use DateTime::SpanSet; use DateTime::Event::Recurrence; use Carp; # Make a set representing mondays to fridays, with # the working hour restriction my $working_days = DateTime::SpanSet->from_sets (start_set => DateTime::Event::Recurrence-> weekly( days => [1..6],hours => [9, 1]), end_set => DateTime::Event::Recurrence-> weekly( days => [1..6],hours => [12, 5]), ); # Make the date range my $date_range = DateTime::Span->from_datetimes (start => DateTime->new( year => 2003, month => 7, day => 1), end => DateTime->new( year => 2003, month => 7, day => 18)); # Build the spanset of legal times my $legal = $working_days->intersection($date_range); ## Test code my $iter = $legal->iterator(); while ( my $dt = $iter->next ) { printf "%s to %s\n", $dt->start->datetime, $dt->end->time; }; ## # Now test the date my $dt = DateTime->new(year => 2003); croak "Bad date range" unless $legal->contains($dt);