1

2009 年 2 月 28日のエポック タイムを取得し、それに 1 週​​間の秒数を追加します。しかし、3 月 7 日ではなく3月 4となります。なんで?

コードは次のとおりです。

#!/usr/bin/perl
use POSIX;

my $hours_per_day    =   24;
my $hours_per_week   =  168;
my $seconds_per_hour = 3600;
my $seconds_per_week = ($hours_per_week * $seconds_per_hour);

#begin at my first week
$epoch_seconds = POSIX::mktime(0,0,12,28,2,109);

for(my $cline = 1; $cline <= 250; $cline++) {
    ($sec,$min,$hour,$mday,$month,
     $year,$wday,$yday,$isdst) = localtime($epoch_seconds);

    $year += 1900;
    print STDOUT "$cline <=> $year/$month/$mday\n";

    $epoch_seconds += $seconds_per_week;
}
4

2 に答える 2

5

2009 年 3 月 28 日に開始し、1 週間後が 2009 年 4 月 4 日です。

use POSIX;

my $hours_per_day=24;
my $hours_per_week=168;
my $seconds_per_hour=3600;
my $seconds_per_week=($hours_per_week*$seconds_per_hour);

#begin at my first week
my $epoch_seconds=POSIX::mktime(0,0,12,28,2,109);

for(my $cline=1; $cline<=250; $cline++) {
    my ($sec,$min,$hour,$mday,$month,
     $year,$wday,$yday,$isdst) =localtime($epoch_seconds);

    print strftime( "%A, %B %e, %Y\t", localtime($epoch_seconds) );
    $year+=1900;
    print STDOUT "$cline <=> $year/$month/$mday\n";

    $epoch_seconds+=$seconds_per_week;
}

PS:strftime日付の書式設定には を使用する必要があります。perldoc POSIX/strftime/ を参照して検索します。

于 2012-03-02T14:24:01.507 に答える
2

毎週が正確に $seconds_per_week の長さであるとは限りません (閏年など)。計算を行う関数/ライブラリ/モジュールを使用する必要があります。

ここまたはここで説明したように。幸運を!

于 2012-03-02T14:21:05.170 に答える