DateTime :: Event :: Sunrise的问题

时间:2010-12-22 12:32:17

标签: perl datetime

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.

2 个答案:

答案 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...