У меня дата (GNU coreutils) 7.1 установлена в моей системе.
Если я пытаюсь проверить даты до 14 декабря 1901 года, я получаю ошибку «неверная дата». Например,
$ date -d 1901-12-13
date: invalid date `1901-12-13'
$ date -d 1901-12-14
Sat Dec 14 00:00:00 EST 1901
Что я должен сделать, чтобы date
утилита считала действительными годы до 1901 года?
Я получаю похожие ошибки на даты после 19 января 2038 года
shell-script
date
Джасдип Сингх
источник
источник
Ответы:
Хороший вопрос.
Документация говорит , что это должно быть разрешено.
Вы в 32-битной системе?
Вы получаете ошибку с датами после 2038-01-20, например,
Если это так, то звучит так, будто в GNU date используется 32-битное значение времени.
Я не уверен, как вы можете это исправить, кроме использования 64-битной системы или использования другого инструмента, например DateTime в Perl или datetime в Python.
Немного предыстории:
Unix times подсчитывает количество секунд с 1 января 1970 года, используя целочисленное значение. Если система использует 32-разрядные целые числа, она может считать только 2,1 миллиарда секунд вперед (до 2038-01-19 03:14:02 UTC) и 2,1 миллиарда секунд назад (обратно к 1901-12-13 20:45:52 УНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ).
Больше информации на:
источник
uname
команды, за исключением того факта, что он говорит о машине i686, которая, как я предполагаю, является 32-битной. Что касается проблемы 2038 года, то да, эта проблема существует на удаленном сервере. Еще раз спасибо за ваш вклад! Очень признателен!!Ваша система (или, по крайней мере, эта версия даты ), вероятно, использует 32-битное значение внутреннего времени.
Эпоха Unix (нулевое значение времени) - 1970-01-01 00:00:00 UTC. Эта отправная точка помещает 1901-12-13 00:00 EST вне диапазона 32-разрядного значения времени со знаком.
1901-12-14 00:00:00 EST -2147454000
1901-12-13 15:45:52 EST -2147483648 (он же
INT_MIN
в C, минимальное 32-разрядное целое число сознаком ) 1901-12-13 00:00: 00 EST -2147540400
Вы можете попробовать использовать 1901-12-13 15:45:52 EST. Это должно работать, но одна секунда раньше, вероятно, потерпит неудачу так же, как 1901-12-13 00:00.
источник