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


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


#  По определению $day является днем месяца
$wday = Oay_of_Week($year $month, $day),
$wnum = Week_Number($year, $month, $day),
$dnum = Day_of_Year($year, $month $day),

Комментарий

Функции Day_of_Week, Week_Number и Day_of_Year получают год без вычитания 1900 и месяц в нумерации, начинающейся с 1 (январь), а не с 0. Возвращаемое значе­ние функции Day_of_Week находится в интервале 1-7 (с понедельника до воскре­сенья) или равняется 0 в случае ошибки (например, при неверно заданной дате).

use Date    Calc qw(Day_of_Week Week_Number),

$year    = 1981,

Smonth =6,               # (Июнь)

$day     = 16,

№ys = qw Error Monday Tuesday Wednesday Thursday Friday Saturday Sunday ,

$wday = Day_of_Week($year,   $month    $day), print    $month/$day/$year was a $days[$wday]\n  ,

$wnum = Week_Number($year,   $month,   $day), print    in the $wnum week \n , 6/16/1981   was   a   Tuesday in  the  25 week

В некоторых странах сущестнуют специальные стандарты, касающиеся пер­вой недели года. Например, в Норвегии первая педеля должна содержать не менее 4 дней (и начинаться с понедельника). Если 1 января выпадает па неде­лю из 3 и менее дней, она считается 52 или 53 неделей предыдущего года. В Аме­рике первая рабочая неделя обычно начинается с первого понедельника года. Возможно, при таких правилах вам придется написать собственный алгоритм или по крайней мере изучить форматы %G, %L, %W и %U функции UmxDate модуля Date::Manip.

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

Описание функции localtime в perlfunc(l); документация по стандартному мо­дулю Date::Calc от CPAN.


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

3.7. Анализ даты и времени в строках

Проблема

Спецификация даты или времени читается в произвольном формате, однако ее требуется преобразовать в отдельные компоненты (год, месяц и т. д.).

Решение

Если дата уже представлена в виде числа пли имеет жесткий, легко анализируе­мый формат, воспользуйтесь регулярным выражением (и, возможно, хэшем, свя­зывающим названия месяцев с номерами) для извлечения отдельных значений дня, месяца и года. Затем преобразуйте их в секунды с начала эпохи с помощью функций timelocal и timegm стандартного модуля Timc::Local.




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