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


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


use Time Local,

# $date хранится в формате 1999-06-03 (ГГГГ-ММ-ДД)
($уууу, $mm $dd) = ($date =" /(\d+)-(\d+)-(\d+)/

й Вычислить секунды с начала эпохи для полночи указанного дня

# в текущем часовом поясе

$epoch_seconds = timelocal(0 0, 0 $dd, $mm $уууу)

Более гибкое решение — применение функции ParseDate из модуля Date::Manip с CPAN и последующее извлечение отдельных компонентов с помощью UnixOate.

use Date    Manip qw(ParseDate UnixDate), $date = ParseDate($STRING) if O$date)  {

# Неверная дата } else {

LVALUES = UmxDate($date    ©FORMATS) }

Комментарий

Универсальная функция ParseDate поддерживает различные форматы дат. Она даже преобразует такие строки, как «today» («сегодня»), «2 weeks ago Friday» («в пятницу две недели назад») и «2nd Sunday in 1996» («2-е воскресенье 199G года»), а также понимает форматы даты/времени в заголовках почты и ново­стей. Расшифрованная дата возвращается в собственном формате — строке вида «ГГГГММДДЧЧ:ММ:СС». Сравнение двух строк позволяет узнать, совпадают ли представленные ими даты, однако арифметические операции выполняются ина­че. Поэтому мы воспользовались функцией UnixDate для извлечения года, месяца и дня в нужном формате.

Функция UnixDate получает дату в виде строки, возвращаемой ParseDate, и спи­сок форматов. Она последовательно применяет каждый формат к строке и воз­вращает результат. Формат представляет собой строку с описанием одного или нескольких элементов даты/времени и способов оформления этих элементов. Например, формат %Y соответствует году, состоящему из четырех цифр. Приве­дем пример:


3.8. Вывод даты    105

use Date    Mamp qw(ParseDate UnixDate)

while (<>)  <

$date = ParseDate($_) if (i$date)  {

warn    Bad date string    $_\n ,

next, } else {

($year,   $month,   $day) = UmxDate($date,    %Y ,    %n ,    %d ),

print    Date was $month/$day/$year\n

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

Документация для модуля Date::Manip с CPAN; пример использования приве­ден в рецепте 3.11.




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