Распознавание дат используя Date::Manip
Sep. 12th, 2007 08:19 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Наткнулся в кукбуке перловой книге на пример парсинга дат. Попробовал. Не получилось: модуль Date::Manip хотел предварительной ласки настройки в виде указания часового пояса. Попутно, глядя на perldoc и исходники модуля, указал в настройках русский язык и начал скармливать даты скрипту:
#!/usr/bin/perl -w
use POSIX 'strftime';
use Date::Manip qw(Date_Init ParseDate UnixDate);
Date_Init('TZ=+0600', 'Language=Russian', 'DateFormat=non-US');
while (<>) {
my $date = ParseDate($_);
if (!$date) {
warn "Bad date\n";
next;
}
else {
my ($y, $m, $d) = UnixDate($date, '%Y', '%m', '%d');
print "Date: $d.$m.$y\n";
} # else
} # while
Выяснил, что скрипт действительно понимает русский язык. Во всяком случае, даты заданные словами: «1 мая», «пятнадцатое марта», «сегодня» и «вчера» — он понимает. Хотя понимает не всё: на английском корректно распознались даты «2 weeks ago» и «1st monday in september», а аналогичные по-русски — нет.
Распознавание RU дат
Date: 2007-10-19 08:48 am (UTC)На английском всё работает, если сменить параметры Date_Init().