2012-01-09 184 views
0

是否有Perl模塊可以給我輸入月份和年份,比如06-2005,今年這個月的最後一天是什麼?對於這個例子,這很容易,因爲6月總是有30天,所以最後一天將是30-06-2005。但二月份情況並非如此。所以,如果我有02-1997,我想知道是返回28-02-1997還是29-02-1997。提前致謝。查找給定月份和特定年份的具體日期

+1

看看[DateTime](http://datetime.perl.org)項目。 – 2012-01-09 16:41:54

回答

0

是的,在Date::Calc模塊中有一個子程序Days_in_Month

use strict; 
use warnings; 

use Date::Calc qw/Days_in_Month/; 

for my $m (1 .. 12) { 
    print Days_in_Month(2005, $m), "\n"; 
} 

輸出

31 
28 
31 
30 
31 
30 
31 
31 
30 
31 
30 
31 
0

的最後一天,在一個給定的月份是在下個月的 「零」 的日子。 mktime()採用基於0的月份和基於1900的年份號碼,並返回一個紀元時間戳。

use POSIX qw(mktime strftime); 

sub last_day { 
    my ($year, $mon) = @_; 
    return mktime(0,0,0, 0, $mon, $year-1900); 
} 

可以傳遞到localtimestrftime

say scalar localtime last_day(2005, 5) 
'Tue May 31 00:00:00 2005' 

say scalar localtime last_day(2005, 6) 
'Thu Jun 30 00:00:00 2005' 

say scalar localtime last_day(1997, 2) 
'Fri Feb 28 00:00:00 1997' 

say scalar localtime last_day(2012, 2) 
'Wed Feb 29 00:00:00 2012' 

say (localtime last_day(1997, 2))[3] 
'28' 

say strftime "%d", localtime last_day(1997, 2) 
'28' 
0

正如有人說,使用DateTime

use DateTime; 
my $dt = DateTime->last_day_of_month('year'=>2000, 'month'=>2); 
print $dt->ymd; # '2000-02-29' 

雖然日期時間可能不是處理日期/時間最快的模塊,它絕對是最完整的一個。它也是唯一一個正確處理日期/時間數學的各種怪癖。

相關問題