Проблема с DateTime :: Event :: Sunrise - PullRequest
1 голос
/ 22 декабря 2010

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 ]

1 голос
/ 22 декабря 2010

Документация кажется неправильной.Источник лучше:

# 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...
1 голос
/ 22 декабря 2010

Документация для этого модуля ужасна.Но я думаю, что вы хотите следующее:

#!/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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...