2015-10-10 16 views
0

我不是一個Perl程序員,但我的工作是使用Date::Calc模塊這樣Perl - 替換Date :: Calc來計算年度Julian日?

與模塊
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。如果你不能安裝模塊(甚至到你自己的主目錄,真的?),只需將相關的代碼複製到你的。