|
Модераторы: korob2001, ginnie |
|
infarch |
|
|||
Опытный Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Здравствуйте!
Вот и наступило будущее. Вызов Date::Calc::Date_to_Time(2039, 3, 27, 2, 0, 0) упал с ошибкой date out of range. В полном соответствии с документацией: "A fatal "date out of range" error will occur if the given date cannot be expressed in terms of seconds since the epoch (this happens for instance when the date lies before the epoch, or if it is later than 19-Jan-2038 03:14:07 GMT..." Вопрос: как жить дальше? В идеале хотелось бы исправить именно этот модуль чтоб не переписывать кучу кода. Если это невозможно, то какие альтернативы? Никто не в курсе? |
|||
|
||||
arto |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
в зависимости от пакета увеличте константу DateCalc_DAYS_TO_OVFLW или $DateCalc_DAYS_TO_OVFLW.
Ну и обратите внимание на архитектуру.
|
|||
|
||||
infarch |
|
||||
Опытный Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
arto, Наконец дошли руки проверить ваш совет. Я нашел эту переменную в Date::Calc::PP
Но вот переопределить ее я не могу. Пробовал так:
Не сработало: Name "Date::Calc::DateCalc_DAYS_TO_OVFLW" used only once: possible typo at C:\bb_projekt\scripts\easy.pl line 7. Date::Calc::Date_to_Time(): date out of range at C:\bb_projekt\scripts\easy.pl line 9. Это сообщение отредактировал(а) infarch - 26.9.2019, 10:42 |
||||
|
|||||
arto |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
Она локальная для модуля. Делайте исправления в нём.
Я для себя поправил XS модуль. |
|||
|
||||
infarch |
|
||||
Опытный Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Боюсь что такой трюк мне не одобрят. Да и я так вижу по коду что проблема не в одной этой константе, там попадаются еще проверки вроде:
Интересно было бы узнать откуда такой лимит. А я пока думаю о рефакторинге и переезде на DateTime. Но там свои тараканы. Например там поддерживается вычитание дат, но из результата вычисления невозможно узнать дельту дней. Вместо вычитания надо использовать функцию delta_days, да еще и не просто так... Выходят конструкции такого типа:
Все это производит впечатление сырого и неряшливого кода, так что я не уверен что хочу тащить это в проект. |
||||
|
|||||
arto |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
это наследие 32-битности.
|
|||
|
||||
infarch |
|
|||
Опытный Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Решил эту проблему созданием модуля - хелпера. Заменил в коде все упоминания Date::Calc на Backbone::DateCalc без каких либо иных изменений. Внутри он переопределяет две функции из Date::Calc::PP. Аналогичный прием для XS не сработал, так что пришлось юзать чистоперл-реализацию. Модуль хорош тем что в принципе ничего и менять не надо, достаточно его заюзать и он применяет фикс. Однако я не исключаю дальнейших его доработок и полного отказа от дейт-калк.
Присоединённый файл ( Кол-во скачиваний: 2 ) DateCalc.pm 2,13 Kb |
|||
|
||||
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |