2015-10-10 8 views
0

Я не программист Perl, но я работаю над программой, которая использует Date::Calc модуль, как этоPerl - замена даты :: Calc для расчета Юлианского дня года?

use Date::Calc ("Day_of_Year") 
my $jday = Day_of_Year($yr[$n], $mon[$n}, $day[$n]); 

У меня возникли проблемы с модулем, и мне нужно заменить выше расчет юлианского дня года в моем коде.

У кого-нибудь есть идеи? У меня нет прав на установку модулей, поэтому мне нужно базовое решение.

ответ

1
#!/usr/bin/perl 
use strict; 
use warnings; 

use Time::Local qw[timegm]; 

# Computes the day of the year [1, 366] from the given year, month of the 
# year and day of the month. 
# https://metacpan.org/pod/Time::Local#Year-Value-Interpretation 
# 1 <= $m <= 12 
# 1 <= $d <= 31 (day must be valid for the year and month) 
sub ymd_to_doy { 
    @_ == 3 or die q/Usage: ymd_to_doy(year, month, day)/; 
    my ($y, $m, $d) = @_; 
    my $t1 = timegm(0, 0, 0, $d, $m - 1, $y); 
    my $t2 = timegm(0, 0, 0, 1, 0, $y); 
    return 1 + int(($t1 - $t2)/86_400); 
} 

use v5.10; 
say ymd_to_doy(2015, 10, 11); 
say ymd_to_doy(2015, 1, 1); 
say ymd_to_doy(2015, 12, 31); 
say ymd_to_doy(2012, 12, 31); 

Выход:

284 
1 
365 
366 
+1

Да, это работает отлично! Благодарим вас за помощь. – user3367135

0

См. Date::Converter. Если вы не можете установить модули (даже в свой собственный домашний каталог, правда?), Просто скопируйте соответствующий код на свой.

 Смежные вопросы

  • Нет связанных вопросов^_^