Почему я получаю ошибку "Day too big" от Perl? - PullRequest
3 голосов
/ 30 марта 2010

Я помогал кому-то отлаживать какой-то код, в котором сообщение об ошибке было «День слишком большой». Я знаю, что это происходит по местному времени и ошибка Y2038 (большинство результатов Google, похоже, люди, имеющие дело с куки, срок действия которых истекает в будущем).

Похоже, что мы «исправили» проблему, используя время для получения текущей даты. Однако, учитывая, что ни одна из наших первоначальных дат не должна была затронуть проблему 2038 года, я скептически отношусь к тому, что мы на самом деле решили эту проблему ...

Есть ли другие случаи, когда кто-нибудь знает, где можно ударить "слишком большой день"?

ОС - это Солярис.

Пример кода - фактический код довольно большой, и человек, с которым я работаю, на самом деле не изолировал оскорбительную часть (поэтому я беспокоюсь, что «исправление» на самом деле не является исправлением). Если я смогу собрать что-то краткое, что воспроизводит проблему, я опубликую!

UPDATE

Я выделил фрагмент кода, поместил несколько операторов print во все и решил проблему ...

Обидная строка кода была:

$temp = str2time(localtime());

Это часто (но не всегда) устанавливало $ temp как undef. Оказывается, что даже когда был установлен $ temp, он не был установлен с ожидаемым значением.

Гвоздь в том, что localtime () возвращает массив в большинстве контекстов ... и это то, что мешает вызову str2time.

Изменив это на:

$ltime = localtime;
$temp = str2time($ltime);

проблема исчезнет.

Конечно, еще лучше, просто используйте:

$temp = time;

1 Ответ

7 голосов
/ 30 марта 2010

В пакете Time::Local есть сообщение "Слишком большой день". Исходный код здесь , если вы хотите продолжить расследование.

Модуль Carp::Always может быть полезен здесь. Запустите нарушающий код с помощью

perl -MCarp::Always script.pl arg1 arg2 ...

и где бы вы ни получали предупреждение раньше, теперь вы получите полный след стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...