Hill, Ronald wrote: > > Hi Flavio, > > [snipped] > > > I agree. > > > > I think that this is a better way to do it, because it keeps DateTime > > object inheritance and it takes care of 'locale' and other internals: > > > > my $tmp_dt1 = $dt->clone->truncate( to => 'day' ); > > I don't know why, but this will not work:( > I added this and the times that were generated were incorrect
Oops. That's my fault. This truncates to current timezone midnight - it's different from the UTC midnight! This is the right way to do it, I think: my $tmp_dt1 = $dt-> clone-> set_time_zone( 'UTC' )-> truncate( to => 'day' ); $tmp_dt1->set_time_zone( $tz ) unless $tz->is_floating; > > > > # $tmp_dt1->set_time_zone( 'UTC' ) > > # if $tmp_dt1->time_zone->is_floating; > > > > my $rise_time = $tmp_dt1 + $rise_dur; > > my $set_time = $tmp_dt1 + $set_dur; > > return ( $rise_time, $set_time ); > > Here is what I ended up doing > > my $rise_time = $tmp_dt1 + $rise_dur; > my $set_time = $tmp_dt1 + $set_dur; > my $tz = $dt->time_zone; > $rise_time->set_time_zone($tz) unless $tz->is_floating; > $set_time->set_time_zone ($tz) unless $tz->is_floating; > return ( $rise_time, $set_time ); That's ok. Maybe you could set the 'locale' too, just in case. However, it does not keep the object class, in case you are not using DateTime. This may be a problem for DT::Calendar::Hebrew and others. - Flavio S. Glock