This is my version:

    [...]
    if( $self->{sunset} && $self->{time_zone} ) 
    {
        my $dt = DateTime->from_object( object => $self );
        my $sunset = $self->{sunset}->next( $dt );
        $sunset->set_time_zone( $self->{time_zone} );
        if ( $sunset->day != $dt->day ) {
            $self->{rd_days}--;
        }
    }

Here is a test:

  use strict;
  use DateTime::Calendar::Hebrew;
  use DateTime::Event::Sunrise;

  my $sunset = DateTime::Event::Sunrise->sunset (
        # Latitude/Longitude for NYC
        longitude =>'-73.59',
        latitude =>'40.38',
  );

  my $h = DateTime::Calendar::Hebrew->new(
      year => 5000, month => 5, day => 15,
      sunset => $sunset,
      time_zone => 'America/New_York' );
  print $h->datetime, " ", ($h->utc_rd_values)[0],"\n";

  $h->set( hour => 22 );
  print $h->datetime, " ", ($h->utc_rd_values)[0],"\n";

  $h->set( day => 18 );
  print $h->datetime, " ", ($h->utc_rd_values)[0],"\n";

  # 5000-05-15T00:00:00 452759
  # 5000-05-15T22:00:00 452758
  # 5000-05-18T22:00:00 452761

- Flavio S. Glock

Reply via email to