ちなみにテストに用いたスクリプトはこんな感じです。
#!/usr/local/bin/perl
use strict;
use Date::Simple 3.0;
for( my $year = 1880; $year < 1920; $year++ ){
for( my $month = 1; $month < 13; $month++ ){
my $day_max = get_day_max($year,$month);
for( my $day = 1; $day <= $day_max; $day++ ){
my $date = Date::Simple->new($year,$month,$day);
print "Bad:",
sprintf('%d-%02d-%02d' , $year, $month, $day),
" ne $date\n"
unless $day == $date->day;
}
}
}
sub get_day_max{
my ($year,$month) = @_;
return $month == 2
? get_february_day_max($year)
}
sub get_february_day_max{
my $year = shift;
if ( $year % 4 == 0 ) {
if ( $year % 100 == 0 ) {
if( $year % 400 == 0 ) {
return 29
}else{
return 28
}
} else {
return 29
}
} else {
return 28
}
}
コンストラクタに渡した日にちとできたオブジェクトから取得した日にちが異なる場合以下のようにprintします。
Bad:1900-02-20 ne 1900-02-19
Bad:1900-02-21 ne 1900-02-20
Bad:1900-02-22 ne 1900-02-21
Bad:1900-02-23 ne 1900-02-22
Bad:1900-02-24 ne 1900-02-23
Bad:1900-02-25 ne 1900-02-24
Bad:1900-02-26 ne 1900-02-25
Bad:1900-02-27 ne 1900-02-26
Bad:1900-02-28 ne 1900-02-27
0 件のコメント:
コメントを投稿