如何獲得一年差的兩個日期之間的Perl中像下面日期如何獲得兩個日期之間年的差距在Perl
my $date1 = '2012-08-29T00:00:00.0000Z'
my $date2 = '2010-08-29T00:00:00.0000Z'
需要幫助並就其.thanks
如何獲得一年差的兩個日期之間的Perl中像下面日期如何獲得兩個日期之間年的差距在Perl
my $date1 = '2012-08-29T00:00:00.0000Z'
my $date2 = '2010-08-29T00:00:00.0000Z'
需要幫助並就其.thanks
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');
之間我在使用上面的代碼時遇到這個錯誤 未定義的子程序&Params :: Validate :: SCALAR在/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/DateTime/Locale.pm第41行調用。 – Zann
@Zann,我們之前已經確定您已經損壞了DateTime :: Locale的安裝並需要重新安裝它。 – ikegami
已重新安裝,但仍然出現一些錯誤。 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
一個輕量級的替代正確解決方案的人將發佈:
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 };
請注意,可能有幾十種不同的方式來指定如何在這個看似微不足道的問題中舍入部分年限。
如果您不關心小時或閏年,可以截斷時間並使用Date :: Simple。
my $days = Date::Simple->new(substr $date2, 0, 10) - Date::Simple->new(substr $date1, 0, 10);
my $years = int($days/365);
*非常*相似:http://stackoverflow.com/questions/821423/how-can-i-calculate-the-number-of-days-between-two-dates-in-perl – Thilo