On Tue, 30 Sep 2003, Steven J. Weinberger wrote:

> If the RD is a value that only changes at midnight (as you noted
> previously), then I think my order is right. The way you're suggesting
> would change the RD if it's after sunset - wouldn't it? If you took a
> DT::Calendar::Hebrew with an incremented RD and converted it to a
> DateTime, then converted that DateTime to another DT::Calendar::Hebrew,
> wouldn't you keep jumping ahead a day, b/c each time you'd increment RD
> b/c it's after sunset on the day in question?

Rata Die, the way we use it in DateTime modules, counts the number of days
since 0001-01-01 00:00:00 UTC, period.  That means if you take a DateTime
like 2001-02-23 22:00:00 UTC as a DateTime object, then convert it to a
DT::C::Hebrew object, and then back, it should still represent the same
UTC RD date and time, 2001-02-23 22:00:00.

In this case, I think your code is correct and Flavio is misreading it,
perhaps.

However, I think you do have a bug here:

    if($self->{sunset} and $self->{time_zone}) {
                my $DT_Event_Sunrise = $self->{sunset};
                my $time_zone = $self->{time_zone};
                my $DT = DateTime->from_object(object => $self);
                $DT->truncate(to => 'day');

                my $sunset = $DT_Event_Sunrise->next($DT);
                $sunset->set_time_zone($time_zone);

                if($sunset > $DT) {
                        $self->{after_sunset} = 1;
                        @{$self}{qw/year month day/} = &_from_rd($self->{rd_days} + 1);
                }
        }

You truncate the $DT var to the day, then ask for the next sunset after
that $DT.  Then you check if "$sunset > $DT".  Well, since you just
truncated $DT and asked for the _next_ sunset, it's _always_ going to be
after $DT!

I think you need to do this:

  my $sunset = $DT_Event_Sunrise->next( $DT->clone->truncate( to => 'day' ) );

and not truncate $DT itself.

BTW, if you want to put this code in the perl-date-time repository on SF,
let me know.


-dave

/*=======================
House Absolute Consulting
www.houseabsolute.com
=======================*/

Reply via email to