Вывод даты

Проблема

Требуется преобразовать дату и время, выраженные в секундах с начала эпохи, в более понятную для человека форму.

Решение

Вызовите localtime или gmtime в скалярном контексте — в этом случае функция получает количество секунд с начала эпохи и возвращает строку вида Tue May 26 05:15:20 1998:
$STRING = localtime($EPOCH_SECONDS);
Кроме того, функция strftime из стандартного модуля POSIX позволяет лучше настроить формат вывода и работает с отдельными компонентами полного времени:
use POSIX qw(strftime);
$STRING = strftime($FORMAT, $SECONDS, $MINUTES, $HOUR,
$DAY_OF_MONTH, $MONTH, $YEAR, $WEEKDAY.
$YEARDAY, $DST);
В модуле Datc::Manip с CPAN есть функция UnixDate — нечто вроде специализированного варианта sprintf, предназначенного для работы с датами. Ей передается дата в формате Date::Manip. Применение Date::Manip вместо POSIX::strftime имеет дополнительное преимущество, так как для этого от системы не требуется совместимость с POSIX.
use Date::Manip qw(UnixDate);
$STRING = UnixDate($DATE, $FORMAT);

Комментарий

Простейшее решение — функция localtime — относится к встроенным средствам Perl. В скалярном контексте эта функция возвращает строку, отформатированную особым образом:
Sun  Sep  21  15:33:36  1999
Программа получается простой, хотя формат строки сильно ограничен:
use Time::Local;
$time = timelocal(50, 45, 3, 18, 0, 73):
print "Scalar localtime gives: ", scalar(localtime($time)), "\n";
Scalar   localtime   gives:   Thu   Jan   18   03:45:50   1973
Разумеется, дата и время для localtime должны исчисляться в секундах с начала эпохи. Функция POSIX::strftime получает набор компонентов полного времени и форматную строку, аналогичную printf, и возвращает также строку. Поля в выходной строке задаются директивами %. Функция strftime ожидает, что отдельные компоненты даты/времени принадлежат тем же интервалам, что и значения, возвращаемые localtime:
use POSIX qw(strftime);
use Time::Local;
$time = timelocal(50, 45, 3, 18, 0, 73):
print "Scalar localtime gives: ", scalar(localtime($time)), "\n";
Scalar   localtime   gives:   Thu   Jan   18   03:45:50   1973
При использовании POSIX::strftime все значения выводятся в соответствии с национальными стандартами. Так, во Франции ваша программа вместо "Sunday" выведет "Dimanche". Однако учтите: интерфейс Perl к функции strftime модуля POSIX всегда преобразует дату в предположении, что она относится к текущему часовому поясу. Если функция strftime модуля POSIX недоступна, у вас всегда остается верный модуль Date::Manip.
use Date::Manip qw(ParseDate UnixDate);
$date = ParseDate("18 Jan 1973, 3:45:50"):
$datestr = UnixDate ($date "%a %b %e %Н : %М : %S %z %Y"); # скалярный контекст
print "Date::Manip gives: $datestr\n";
Date::Manip gives: Thu Jan 18 03:45:50 GMT 1973.

См. также

Описание функции gmtime и localtime



2013-09-10 17:05:19

Proverte kod v komentariyah gde pro list tam oshibki detskie




Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: