Доброго дня, читатели блога Re:Notes! Сегодня речь зайдет о времени в *nix-подобных системах. В Perl моменты времени представлены в виде интервалов, измеряемых в секундах с некоторого момента, называемого началом эпохи.

В Unix и многих других системах начало эпохи соответствует 00 часов 00 минут 1 января 1970 года по Гринвичу (GMT1).

Для хранения времени в СУБД, с которым в дальнейшем придется производить какие-либо действия (например, время регистрации или последнего посещения), желательно использовать unixtime-формат. Пример даты 12.10.2013 для наглядности: 1381521600.

Следующий пример на языке Perl демонстрирует перевод вышеобозначенной даты в формат unixtime и обратно.

#!/usr/bin/perl -w
use strict;
 
use HTTP::Date;
 
my $time = '12.10.2013';
$time =~ s/(\d+)\.(\d+)\.(\d+)/$1-$2-$3/;
my $timenix = str2time( $time );
print "TIMENIX: ", $timenix, "\n";
 
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime( $timenix );
$year += 1900;
$mon  += 1;
print "DATE: $mday.$mon.$year \n";

P.S. Функция localtime без аргументов возвращает текущую дату и время.