Hi Flavio,

I am working on the as_set portion of the sunrise module and I need your
advise. What I wanted to accomplish is to have the module accept a
DateTime::Set object compute the rise/set times and return a new
DateTime::Set object. Here is what I have done:

sub as_set {
        my $self = shift;
        my $dt = shift;
        croak( "Dates need to be DateTime::Set objects (" . ref($dt) . ")" )
      unless ( ref($dt) eq 'DateTime::Set' );
      my @set = ();
      my $iter = $dt->iterator;
      while (my $tmp_dt = $iter->next )  {
            my($tmp_rise,$tmp_set) = sunrise( $self, $tmp_dt);
            push(@set, $tmp_rise);
              push(@set, $tmp_set);
    }
        return DateTime::Set->new( dates =>[sort @set] );
        
}

Having done this, I was able to write a perl script using the easter and
sunrise
module like this:
#!/usr/bin/perl
use strict;
use warnings;
use DateTime;
use DateTime::Event::Sunrise;
use DateTime::Event::Easter;

my $easter_sunday = DateTime::Event::Easter->new();

my $sunrise = DateTime::Event::Sunrise ->new(
                 Longitude =>'-118' ,
                     Latitude => '33',
);

my $dt1 = DateTime->new( year   => 2000,
                 month  => 1,
                 day    => 1,
                  );

my $dt2 = DateTime->new( year   => 2050,
                 month  => 12,
                 day    => 1,
                  );


my $easter = $easter_sunday->as_set(from=>$dt1, to=>$dt2, inclusive=>1);

my $set2 = $sunrise->as_set($easter);

my $iter = $set2->iterator;
while ( my $dt = $iter->next ) {
    $dt->set_time_zone( 'America/Los_Angeles' );
    print $dt->datetime ."\n";
}

Is there anything else I need to add/change?

Please advise.

Thanks

Ron Hill

Reply via email to