DateTime::Event::Sunrise
为什么我在这里收到消息“无法找到对象方法”sunrise_datetime“通过包”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 "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.
答案 0 :(得分:1)
该模块的文档非常糟糕。但我认为您需要以下内容:
#!/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;
返回此内容:
$ ./sunrise
Sunrise is: 2010-12-22T07:43:20
Sunset is: 2010-12-22T16:05:30
答案 1 :(得分:1)
这个文档似乎有误。消息来源更好:
# 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
重要的是,您调用它的对象必须是类DateTime::Event::Sunrise
。您的$sunrise
对象属于DateTime::Set
类。
您可以通过将$sunrise
创建为DateTime::Event::Sunrise
:
my $sunrise = DateTime::Event::Sunrise->new(
longitude => $longitude,
latitude => $latitude,
altitude => '-0.833',
iteration => '1'
);
或者使用DateTime::Set
提供的迭代工具代替:
my $dt1 = $sunrise->next( $dt ); # or current, closest...