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


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


Как было показано во введении, количество секунд с начала эпохи не может выходить за пределы интервала от 20:45:52 13 декабря 1901 года до 03:14:07 19 января 2038 года включительно. Не преобразуйте такие даты — либо воспользуй­тесь модулем Date:: с CPAN, либо выполните вычисления вручную.

> Смотри также---------------------------------------------------------------------------------------------

Документация по стандартному модулю Time::Local. Обратное преобразова­ние рассматривается в рецепте 3.3.

3.3. Преобразование секунд с начала эпохи в полное время

Проблема

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

Решение

Воспользуйтесь функцией localtime или gmtime в зависимости от того, хотите ли вы получить дату/время для текущего часового пояса или для Гринвичского меридиана.

(Sseconds    $minutes,   $hours    $day_of_month    $year $wday,   $yday    $isdst)  = localtime($TIME)

Стандартные модули Time-.timelocal n Time: gmtime переопределяют функ­ции localtime и gmtime так, чтобы к компонентам можно было обращаться по именам:

use Time localtime,     # или Time gmtime $tm = localtime($TIME),   # или gmtime($TIME) Sseconds = $tm->sec, #

Комментарий

Функции localtime и gettime возвращают несколько странную информацию о годе и месяце; из года вычитается 1900, а нумерация месяцев начинается с 0 (ян­варь). Не забудьте исправить полученные величины, как это делается в следующем примере:

(Sseconds,   Smmutes    $hours,   $day_of_month,   $month,   Syear,

$wday,   $yday,   $isdst) = localtime($time), pnntf(  Dateline     %02d %02d %02d-%04d/%02d/%02d\n  ,

Shours,   $mmutes,   Sseconds,   $year+1900,   $month+1,

$day_of_nionth),

Модуль Time::localtime позволяет избавиться от временных переменных:

use Time localtime, $tm = localtime($time)


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

printf( Dateline     %02d %02d %02d-%04d/%02d/%02d\n  , $tm->hour,   $tm->min,   $tm->sec,   $tm->year+1900, $tm->mon+1,   $tm->mday),




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