PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 100
Модуль Timc::localtime переопределяет localtime так, чтобы функция возвращала объект Time::tm:
use Time localtime
$tm = localtime,
($DAY, SMONTH, $YEAR) = ($tm->mday, $tm->mon, $tm->year),
Комментарий
Вывод текущей даты в формате ГГГГ-ММ-ДД с использованием стандартной функции localtime выполняется следующим образом:
($day, Smonth, $year) = (localtime)[3,4 5],
printf( The current date is %04d %02d %02\n $year+1900, $month+1, $day),
The current date is 1999 04 28
Нужные ноля из списка, возвращаемою localtime, извлекаются с помощью среза. Запись могла выглядеть иначе:
($day, Smonth, $year) = (localtime)[3 5],
А вот как текущая дата выводится в формате ГГГГ-ММ-ДД (рекомендованном стандартом ISO 8601) с использованием Time::localtime:
use Time localtime
$tm = localtime,
printf( The current date is %04d-%02d-%02\n , $tm->year+1900,
($tm->mon)+1, $tm->mday) The current date is 1999-04-28
В короткой программе обьектный интерфейс выглядит ]1еуместпо. Однако при большом объеме вычислений с отдельными компонентами даты обращения по имени заметно упрощают чтение программы.
То же самое можно сделать и хитроумным способом, не требующим создания временных переменных:
printf( The current date is %04d-%02d-%02\n ,
sub {($_[5]+1900, $_[4]+1 $_[3])}->(localtime)),
Кроме того, в модуле POSIX имеется функция strftime, упоминаемая в рецепте 3.8:
use POSIX qw(strftime),
print strftime %Y-%m-%d\n , localtime,
Функция gmtime работает аналогично localtime, но возвращает время по Гринвичу, а не для местного часового пояса.
> Смотри также---------------------------------------------------------------------------------------------
Описание функций localtime и gmtime вperlfunc(l); документация по стандартному модулю Time::locallime.
98 Глава 3 • Дата и время
3.2. Преобразование полного времени в секунды с начала эпохи
Проблема
Требуется преобразовать дату/время, выраженные отдельными значениями дня, месяца, юда и т. д. в количество секунд с начала эпохи.
