7

特定の年に日付が入る週を見つけようとしています。「week1-2012」や「week34-2011」などのフォルダーに分類する必要があるファイルがたくさんあります。検索してみましたが、現在使用している perl v5.6.1 が非常に古く、モジュールをダウンロードできないため、多くの結果があまり役に立ちません。このリンク (日付が指定された週番号を計算するにはどうすればよいですか? ) も興味深いものでしたが、年と週の曜日を簡単に取得するにはどうすればよいか疑問に思っていました。月を取得し、適切な日数を追加して、年の日付を調べることを考えていました。どんな助けでも大歓迎です。私が探している年の形式の例は

//year 2012
S  M  T  W  R  F  S
            1  2  3    <-- week #1 
4  5  6  7  8  9 10    <-- week #2 //came from the link

//dec year 2011
S   M  T  W  T  F  S
27 28 29 31            <-- week #52 or 53, not to sure the actual week
4

3 に答える 3

8

コアモジュールを使用できます:POSIXおよびTime::Local

1.日付を(秒、分、時間、mday、月、年)に解析します

2.日付を秒に変換します(エポック)

3. 関数 strftime を使用して、現在の日付から週を取得します

use strict;
use Time::Local;
use POSIX qw(strftime);

my $date = '08/15/2012';
my ($month, $day, $year) = split '/', $date;

my $epoch = timelocal( 0, 0, 0, $day, $month - 1, $year - 1900 );
my $week  = strftime( "%U", localtime( $epoch ) );

printf "Date: %s № Week: %s\n", $date, $week;

出力

Date: 08/15/2012 № Week: 33
于 2012-08-15T18:53:33.210 に答える
6

Perl 5.6.1 は 2001 年 4 月にさかのぼります。誰かが、使用する最新のツールを提供しないことで、あなたの生活を必要以上に困難にしています。その問題を解決するために時間を費やす価値があると思います。

Perl 5.10 以降を使用している場合は、Time::Pieceモジュールが含まれます。そして、あなたの問題は些細なことになるでしょう。

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

use Time::Piece;

my $date = '08/15/2012';

my $dt = Time::Piece->strptime($date, '%m/%d/%Y');

say $dt->strftime('week%W-%Y');

実行すると、次のようになります。

$ ./week 
week33-2012

これは、週を日~土ではなく、月~日としてカウントします。

于 2012-08-16T09:32:39.950 に答える
4

を使用した代替ソリューションを次に示しDateTimeます。

use strict;
use warnings;
use DateTime;

my $dt=DateTime->now(time_zone=>"local");
print $dt->week_number . "\n";

もちろん、出力は次のとおりです。

33

編集: もちろん 、モジュールをダウンロードできます! 他に何もない場合は、から関連するコードをコピーして使用できますDateTime

于 2012-08-15T18:57:47.530 に答える