2012-06-19 126 views
-1

如何獲得一年差的兩個日期之間的Perl中像下面日期如何獲得兩個日期之間年的差距在Perl

my $date1 = '2012-08-29T00:00:00.0000Z' 
my $date2 = '2010-08-29T00:00:00.0000Z' 

需要幫助並就其.thanks

+1

*非常*相似:http://stackoverflow.com/questions/821423/how-can-i-calculate-the-number-of-days-between-two-dates-in-perl – Thilo

回答

9
use DateTime::Format::RFC3339 qw(); 
my $format = DateTime::Format::RFC3339->new(); 

my $dt1 = $format->parse_datetime('2010-08-29T00:00:00.0000Z'); 
my $dt2 = $format->parse_datetime('2012-08-29T00:00:00.0000Z'); 
my $dur = $dt2 - $dt1; 

say sprintf "%d years", $dur->in_units('years'); 

參考: DateTime,DateTime::Duration,DateTime::Format::RFC3339

+0

之間我在使用上面的代碼時遇到這個錯誤 未定義的子程序&Params :: Validate :: SCALAR在/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/DateTime/Locale.pm第41行調用。 – Zann

+3

@Zann,我們之前已經確定您已經損壞了DateTime :: Locale的安裝並需要重新安裝它。 – ikegami

+0

已重新安裝,但仍然出現一些錯誤。 cpan DateTime ::語言環境 CPAN:可以加載的可裝載 要閱讀/root/.cpan/Metadata 數據庫生成於2012年6月19日星期二01:16:49 GMT DateTime :: Locale是最新的。在/ usr/lib /下調用的SCALAR未定義的子程序&Params :: Validate :: SCALAR在/ usr/lib/lib/perl5/site_per l/5.8.8/i386-linux-thread-multi/DateTime/Locale.pm line 41. – Zann

1

一個輕量級的替代正確解決方案的人將發佈:

my $date1 = '2012-08-29T00:00:00.0000Z'; 
my $date2 = '2010-08-29T00:00:00.0000Z'; 
my $years_diff = do { no warnings "numeric"; $date1 - $date2 }; 

請注意,可能有幾十種不同的方式來指定如何在這個看似微不足道的問題中舍入部分年限。

+0

我明白了..謝謝全部 – Zann

+1

這並不能爲大多數輸入提供正確的答案。例如將'$ date1'更改爲'2012-08-28T00:00:00.0000Z'。 – ikegami

+0

在這種情況下,你怎麼知道答案是什麼,ikegami?正如我所說,有很多不同的方法可以循環。 – ysth

0

如果您不關心小時或閏年,可以截斷時間並使用Date :: Simple。

my $days = Date::Simple->new(substr $date2, 0, 10) - Date::Simple->new(substr $date1, 0, 10); 
my $years = int($days/365); 
相關問題