Что меня в последнее время стало несколько раздражать, так это отсутствие единого стандарта по работе с датами и временем в Perl.
Вроде бы и классно, что гибко, да поди ж ты угадай, что тебе вернет $client->birthday:) Это может быть и строка или же Class::Date(кстати, неплохой, мне очень нравится), Date::Simple, Date::Tiny... [впишите здесь свой любимый модуль]. Интерфейсы у каждого свои, методы работы - свои, проблемы - наши:)
Даты
- rimas's blog
- Login or register to post comments

Как по мне..
...самый мощный и удобный - это Date::Manip. Всегда находил там все, что надо. На сколько знаю, многое на его основе написано.
Date::Calc
Не знаю, как так получалось, но в жизни кроме
Date::Calc::Days_in_Month()
Date::Calc::Day_of_Week()
ничего использовать не приходилось :)
Что вернет $client->birthday - надо строжайше знать :)
DateTime
Может я чего пропустил в перловом мире, но имхо стандарт есть и это DateTime.
http://datetime.perl.org/?Modules
расширений достаточно. посчитать можно "черта лысого", отформатить как угодно, свои парсеры и форматтеры строятся легко и непринужденно.
Date::Calc - XS модуль если я не ошибаюсь. Имхо главный недостаток - везде работа со списками, а не с обьектом типа Дата. Хоть местами это удобно. Ну и XS - в данном случае излишен.
Date::Manip не получает таймзоны из %ENV на виндовых машинах - в результате безбожно глючит, а то и рушится. Последний опыт правда был пару лет назад.
Воторой недостаток - все в одном флаконе - модуль получился огромными с болшими временными потерями на парсинг в чистом CGI. Фигли мучать так парсер перла ради вывести отформатированную дату? DateTime разбит на модули и грузишь только то что надо.
А я никогда не
А я никогда не озадачивался, брал и использовал список, возвращаемый localtime или даже прямо работал с unixtime (32-битовое число, количество секунд с 1-го января 1970 года), которое возвращает стандартная функция time .
- Для календаря ничего лучше unixtime даже придумать нельзя - оно всегда UTC и редко в жизни требуется точность лучше секунды, также вполне употребимо для рассчета таймаутов в большинстве случаев (впрочем, доли секунды это уже не функция календаря).
Кстати, я реально не понимаю, какой смысл изобретать для дат что-то кроме unixtime, в смысле внутри программы использовать unixtime, а выводить на печать уже можно форматировать.
Да, иметь под рукой UNIX полезно еще и тем что можно при необходимости выдрать из локалей названия месяцев и дней недели на огромном количестве языков. Вобщем я когда последний раз это делал - где-то за минут 15 (быстрее чем слить с CPAN) слепил функцию, выводящую отформатированную дату.
А, еще есть "хакерский" путь - мне как-то лень было разбираться с датами, и я взял и заполучил отформатированную дату от mysql :)
Что-то вроде "select now(); "
однозначно unixtime рулит
оно и в SQL лучше вставляется и вывод с него же отформатировать как угодно можно