2012-01-09 6 views
0

入力月と年を私に与えることができるPerlモジュールがあります。今年の今月の最後の日は何ですか?この例では、6月には常に30日があるため、最後の日は30-06-2005になるため、簡単です。しかし、2月はそうではありません。だから、もし私が02-1997を持っていれば、28-02-1997か29-02-1997を返すかどうかを知りたいです。前もって感謝します。指定された月と特定の年の特定の日を見つけよう

+1

[DateTime](http://datetime.perl.org)プロジェクトを見てください。 –

答えて

0

はい、Days_in_MonthというサブルーティンがDate::Calcモジュールにあります。

use strict; 
use warnings; 

use Date::Calc qw/Days_in_Month/; 

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

OUTPUT

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

与えられた月の最後の日は次の月の "0番" の日です。 mktime()は、0ベースの月と1900年の年の番号を取り、エポックタイムスタンプを返します。

use POSIX qw(mktime strftime); 

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

あなたはlocaltimeまたはstrftimeにそれを渡すことができます。

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' 

DateTimeの日付/時刻を処理するための最速のモジュールではないかもしれないが、それは間違いなく最も完全な一つです。それは、日付/時刻の数学のさまざまな癖を正しく処理する唯一のものです。

関連する問題