PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 108


3.8. Вывод даты

Проблема

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

Решение

Вызовите localtime пли gmtime в скалярном контексте — в эюм случае функция получает количество секунд с начала эпохи и возвращает строку вида Tue May 26 05:15-20    1998:

SSTRING =  localtime($EPOCH_SECONDS),

Кроме того, функция strftime из стандартного модуля POSIX позволяет луч­ше настроить формат вывода и работает с отдельными компонентами полного времени:

use POSIX qw(strftime),

SSTRING = strftime($FORMAT SSECONDS, SMINUTES, SHOUR,

$DAY_OF_MONTH SMONTH, $YEAR, $WEEKDAY,

SYEARDAY, $DST),

В модуле Date::Manip с CPAN есть функция UnixDate — нечто вроде специализи­рованного варианта spnntf, предназначенного для работы с датами. Ей передается дата в формате Date::Manip. Применение Date::Manip вместо POSIX::strftime имеет дополнительное преимущество, так как для этого от системы не требуегся совместимость с POSIX.

use Date    Manip qw(UmxDate) SSTRING = UmxDate($DATE,   SFORMAT),


106   Глава 3 • Дата и время

Комментарий

Простейшее решение — функция 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   gives1.   Thu   Jan   18   03:45:50   1973

Разумеется, дата и время для localtime должны исчисляться в секундах с нача­ла эпохи. Функция POSIX strftime получаст набор компонентов полного време­ни и форматную строку, аналогичную pnntf, и возвращает также строку. Поля в выходной строке задаются директивами %. Полный список директив приведен в документации по strftime для вашей системы. Функция strftime ожидает, что от­дельные компоненты дагы/временп принадлежат тем же интервалам, что и зна­чения, возвращаемые localtime:




- Начало -  - Назад -  - Вперед -