月の初めからカウントして、指定した日が第何の何曜日か計算するサブルーチン
2023/06/27 21:00
category:Perl
もっといい方法があると思うんだけど、何回その週が現れたかカウントアップしているだけです。
サブルーチンの引数をチェックする部分は考慮していません。
ChatGPTで色々学習させて作らせてみたけど、どうにもちゃんと動くものがなぜか出来なかったので仕方なく・・・。
#!/usr/bin/perl
use strict;
use warnings;
use Time::Local;
my $year = 2023;
my $mon = 6;
my $day = 21;
my @days_of_week = qw(日 月 火 水 木 金 土);
my ($week_count,$week_no) = week_count($year,$mon,$day);
if ( defined $week_count and defined $week_no ) {
print "$year年$mon月$day日は、第$week_count $days_of_week[$week_no]曜日です\n";
}
sub week_count {
my ($year,$mon,$day) = @_;
my $week_count;
my $week_no;
for ( my $i = 1 ; $i <= $day ; $i++ ) {
my $time = timelocal(0,0,0,$i,$mon-1,$year-1900);
my $week = (localtime($time))[6];
$week_count->[$week]++;
if ( $i == $day ) {
$week_count = $week_count->[$week];
$week_no = $week;
last;
}
}
return($week_count,$week_no);
}
■実行結果
2023年6月21日は、第3 水曜日です