2012-03-02 4 views
1

Я получаю эпоху в 28 февраля th 2009, , а затем добавьте к ней количество секунд в неделю. Но затем я получаю 4 марта th вместо 7 марта th. Зачем?Perl localtime error

Ниже приведен код:

#!/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; 
} 
+1

Как у вас есть золотой значок, но не знаете, как использовать форматирование кода разметки? – TLP

+0

@TLP, вот что я хочу знать. >. < – Qtax

+0

четыре пробела = "это код". Наверное, сейчас. –

ответ

5

Вы, начиная с 28 марта 2009 года, а через неделю это 4 апреля, 2009.

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 /.

+0

oh штопан .. 2 - марш .. off курс! Я просто предположил, что 2 - февраль. –

2

Не каждую неделю ровно $ seconds_per_week длинные (Leap лет и т.д.), вы должны использовать/библиотека/функциональный модуль, который делает расчеты для вас.

Как описано here или here. Удачи!

+0

['Использовать DateTime;'] (http://datetime.perl.org/) – Qtax

+0

Я попытался, столкнулся с трудностями при установке модуля. Cpan - не лучший пользовательский интерфейс, который я видел в мои дни. –

+1

Герман Инджалдссон, неопределенный комментарий расплывчатый. CPAN - это жизненная кровь Perl, поэтому мы скорее помогаем вам в установке наиболее подходящего программного обеспечения. [Открыть новый вопрос] (http://stackoverflow.com/questions/ask), чтобы описать проблему. - Напишите точно, какой аспект пользовательского интерфейса вы нашли плохим, без критики нет улучшения. – daxim

Смежные вопросы