开发者

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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜