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


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


Решение

Воспользуйтесь функцией timelocal пли timegm стандартного модуля Time::Local. Выбор зависит от того, относится ли дата/время к текущему часовому поясу пли Гринвичскому меридиану:

use Time    Local,

$TIME = timelocal($sec,   $mm,   $hours    Smday,   Smon,   $year)

$TIME = timegm($sec,   $min,   $hours    $mday,   $mon    $year),

Комментарий

Встроенная функция localtime преобразует количество секунд с начала эпохи в компоненты полного времени; процедура timelocal из стандартного модуля Time::Local преобразует компоненты полного времени в секунды. Следующий пример показывает, как определяется количество секунд с начала эпохи для теку­щей даты. Значения дня, месяца и года получаются от localtime:

# $hours, Sminutes и Sseconds задают время для текущей даты

#  и текущего часового пояса
use Time Local

$time = timelocal($seconds, Sminutes, $hours, (localtime)[3 4,5])

Если функции timelocal передаются месяц и год, они должны принадлежать тем же интервалам, что и значения, возвращаемые localtime. А именно, нумера­ция месяцев начинав!ся с 0, а из года вычитается 1900.

Функция timelocal предполагает, что компоненты полного времени соответству­ют текущему часовому поясу. Модуль Time::Local также экспортирует процедуру timegm, для которой компоненты полного времени задаются для Гринвичского ме­ридиана. К сожалению, удобных средств для работы с другими часовыми пояса­ми, кроме текущего или Гринвичского, не существует. Лучшее, что можно сде­лать, — преобразовать время к Гринвичскому и вычесть или прибавить смещение часового пояса в секундах.

В следующем фрагменте демонстрируется как применение timegm, так и настрой­ка интервалов года и месяца:

#  $day - день месяца (1-31)

#  $month - месяц (1-12)

8 $уеаг - год, состоящий из четырех цифр (например, 1999)

# $hours, Sminutes и Sseconds - компоненты времени по Гринвичу
use Time Local,

$time = timegm($seconds, Sminutes $hours, Sday, $month-1, Syear-1900)


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




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