2012-01-30 .. 2012-04-06 のような日付の範囲があります。これは、これらの日付に含まれる一連の週を表します。これらの週には 1 から 10 までの番号が付けられています。今日の日付 (たとえば 2012-02-29) から、範囲内 (この場合は 5) の週番号を取得できるようにしたいと考えています。Perlでこれを達成するにはどうすればよいですか?
質問する
1001 次
3 に答える
3
パッケージTime::Piece
にはstrptime
、文字列を時間オブジェクトに解析するメソッドと、week
時間オブジェクトの週数を示すメソッドがあります。
use Time::Piece;
my @dates = ('2012-01-30', ..., ...., '2012-04-06');
foreach my $strdate (@dates) {
my $date = Time::Piece->strptime($strdate, "%Y-%m-%d");
print "Number of week for '$strdate' is " . $date->week . "\n";
}
必要なのは、範囲内の一意の週数を数えることだけです。
于 2012-01-28T12:31:18.410 に答える
1
値のチェックを組み込みたい場合を除いて、終了日の値は何の違いもありません。必要な値は、week(開始日)-week(この日付)+1です。Date::Calc
私はその整頓と効率のためにモジュールをお勧めします。コードは次のようになります
use strict;
use warnings;
use Date::Calc 'Week_Number';
sub week {
Week_Number(split /-/, $_[0]);
}
print week('2012-02-29') - week('2012-01-30') + 1, "\n";
出力
5
于 2012-01-28T13:48:56.137 に答える
1
use DateTime qw();
my (undef, $initial_weeknumber)
= DateTime->new(year => 2012, month => 1, day => 30)->week;
my (undef, $target_weeknumber)
= DateTime->new(year => 2012, month => 2, day => 29)->week;
printf 'We are in week %d of the Jashank epoch.',
1 + $target_weeknumber - $initial_weeknumber;
于 2012-01-28T19:15:15.570 に答える