Problem with DateTime::Event::Sunrise
DateTime::Event::Sunrise
Why do I get here the message "Can't locate object method "sunrise_datetime" via package "DateTime::Set""#!/usr/bin/env perl
use warnings;
use 5.012;
use DateTime;
use DateTime::Event::Sunrise;
my $dt = DateTime->new( year => 2010, month => 12, day => 22, time_zone => 'CET' );
my $longitude = 16;
my $latitude = 48;
my $sunrise = DateTime::Event::Sunrise ->sunrise (
longitude => $longitude,
latitude => $latitude,
altitude => '-0.833',
iteration => '1'
);
my $sunset = DateTime::Event::Sunrise ->sunset (
longitude => $longitude,
latitude => $latitude,
altitude => '-0.833',
iteration => '1'
);
my $dt1 = $sunrise->sunrise_datetime( $dt );
say开发者_如何学Go "Sunrise is:", $dt1->datetime;
my $dt2 = $sunrise->sunset_datetime( $dt );
say "Sunset is:", $dt2->datetime;
# Can't locate object method "sunrise_datetime" via package "DateTime::Set" at ./so.pl line 24.
The documentation seems wrong on this one. The source has it better:
# FUNCTIONAL SEQUENCE for sunrise_sunset
#
# _GIVEN
#
# A sunrise class
# A DateTime object
#
# _THEN
#
# Validate the DateTime object is valid
# Compute sunrise and sunset
#
#
# _RETURN
#
# DateTime object that contains the rise times
The important part is that the object you invoke it on must be of class DateTime::Event::Sunrise
. Your $sunrise
object is of class DateTime::Set
.
You could get it to work by either creating $sunrise
as a DateTime::Event::Sunrise
:
my $sunrise = DateTime::Event::Sunrise->new(
longitude => $longitude,
latitude => $latitude,
altitude => '-0.833',
iteration => '1'
);
Or by using the iteration facilities provided by DateTime::Set
instead:
my $dt1 = $sunrise->next( $dt ); # or current, closest...
The documentation for that module is terrible. But I think that you want the following:
#!/usr/bin/env perl
use warnings;
use 5.012;
use DateTime;
use DateTime::Event::Sunrise;
my $dt = DateTime->new( year => 2010, month => 12, day => 22, time_zone => 'CET' );
my $longitude = 16;
my $latitude = 48;
my $sunrise = DateTime::Event::Sunrise ->sunrise (
longitude => $longitude,
latitude => $latitude,
altitude => '-0.833',
iteration => '1'
);
my $sunset = DateTime::Event::Sunrise ->sunset (
longitude => $longitude,
latitude => $latitude,
altitude => '-0.833',
iteration => '1'
);
my $dt1 = $sunrise->next($dt);
say "Sunrise is: ", $dt1->datetime;
my $dt2 = $sunset->next($dt);
say "Sunset is: ", $dt2->datetime;
Which returns this:
$ ./sunrise
Sunrise is: 2010-12-22T07:43:20
Sunset is: 2010-12-22T16:05:30
精彩评论