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


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


Мы также могли воспользоваться функцией Add_Delta_DHMS и обойтись без преобразований к секундам с начала эпохи и обратно:

use Date   Calc qw(Add_Delta_DHMS),

($year, Smonth $day, $hh, $mm, $ss) = Add_Delta_DHMS(

1973, 1, 18, 3, 45, 50, # 18 января 1973 года, 03 45 50

55, 2, 17, 5), # 55 дней, 2 часа, 17 минут, 5 секунд print To be prcise $hh $mm $ss, $month/$day/$year\n', To be precise: 6:2:55, 3/14/1973

Как обычно, необходимо проследить, чтобы аргументы функции находились в правильных интервалах. Add_Delta_DHMS получает полное значение года (без вы­читания 1900). Нумерация месяцев начинается с 1, а не с 0. Аналогичные парамет­ры передаются и функции Add_Delta_Days модуля Date::DateCalc:

use Date DateCalc qw(Add_Delta_Days), ($year, Smonth, $day) = Add_Delta_Days( 1973, 1, 18, 55), print Nat was 55 days old on $month/$day/$year\n Nat was 55 days old on: 3/14/1973

 Смотри также

Документация по модулю Date::Calc от CPAN.

3.5. Вычисление разности между датами

Проблема

Требуется определить количество дней между двумя датами или моментами времени.

Решение

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

Sseconds = $recent = $earlier

Если вы работаете с отдельными компонентами полного времени или беспо­коитесь об ограничениях интервалов для секунд с начала эпохи, воспользуйтесь модулем Date::Calc с CPAN. Он позволяет вычислять разность дат:

use Date Calc qw(Delta_DHMS), ($days, Shours, $minutes, Sseconds) =

Delta_DHMS( Syeari, $month1, $day1, $hour1, $minute1, $seconds1, #  Ранний

ft  момент

$year2, $month2, $day2, $hour2, $mmute2, $seconds2, й Поздний

й момент


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

Комментарий

Одна из проблем, связанных с секундами с начала эпохи, — преобразование больших целых чисел в форму, понятную для человека. Следующий пример демон­стрирует один из способов преобразования секунд с начала эпохи в привычные недели, дни, часы, минуты и секунды:




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