Я помогал кому-то отлаживать некоторый код, где сообщение об ошибке было «слишком большим днем». Я знаю, что это происходит из локального времени и ошибки Y2038 (большинство результатов Google - это люди, имеющие дело с кукисами, которые быстро уходят в будущее).Почему у меня есть ошибка «День слишком большой» от Perl?
Похоже, что проблема «исправлена», используя время, чтобы получить текущую дату. Однако, учитывая, что ни одна из наших исходных дат не попала в проблему 2038 года, я скептически отношусь к тому, что мы на самом деле устранили проблему ...
Есть ли другие случаи, когда кто-нибудь знает, где можно было бы попасть в «день слишком большой» «?
ОС - Solaris.
Образец кода - фактический код довольно большой, и человек, с которым я работаю, фактически не изолировал оскорбительную часть (именно поэтому я беспокоюсь, что «исправить» на самом деле не является исправлением). Если я смогу собрать что-то краткое, которое воспроизведет вопрос, я опубликую!
UPDATE
Я выделил кусок кода, поставить некоторые операторы печати вокруг все и решило проблему ...
Нарушитель строка кода была:
$temp = str2time(localtime());
Это было часто (но не всегда), устанавливая $ temp как undef. Оказывается, что даже когда $ temp был установлен, он не был установлен с ожидаемым значением.
Получено, что localtime() возвращает массив в большинстве контекстов ... и вот что вызывает вызов str2time.
Изменяя это:
$ltime = localtime;
$temp = str2time($ltime);
проблема уходит.
Конечно, еще лучше, просто использовать:
$temp = time;
У вас есть образец кода и описание вашей среды/ОС? –