1

我得到了 2009 年 2 月 28日的纪元时间,然后加上一周的秒数。但是后来我得到了 March 4 th而不是 March 7 th。为什么?

以下是代码:

#!/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 日开始,一周后是 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 长(闰年等),您应该使用为您进行计算的函数/库/模块。

就像解释herehere一样。祝你好运!

于 2012-03-02T14:21:05.170 回答