Нууу мне первое, что вспомнилось - это rand в плюсах. Он же выплевывает кол-во секунд с магической даты 1 января 1970 года. Мне как плюсисту это было важно :D
А вообще, какого-то основательного объяснения этому я не находила...
В UNIX и всем, что из него выросло, включая POSIX и libc, время считается как число секунд с 1 января 1970-го года. Так придумали их создатели в 70-е годы
7 февраля 2036-го года счетчик переполнится и все накроется пиздецом. Правда современные ОС поддерживают 64-х разрядное представление времени, но есть еще куча 32-х разрядных систем и библиотек, в первую очередь на всяком встраиваемом железе.
Главной критической датой с точки зрения Unix-времени считается 19 января 2038 года в 03:14:08 по всемирному времени, когда значение переменной типа time_t, отсчитывающей число секунд, прошедших с 1 января 1970 года, достигнет 2 в 31 степени, что может привести к ошибочной интерпретации этого числа как отрицательного. Комплекс рисков, связанных с этой датой, получил наименование проблемы 2038 года. Возможное решение данной проблемы состоит в использовании для хранения времени не 32-битной, а 64-битной переменной (что и делается во всех современных 64-битных операционных системах), этого хватит на 292 млрд лет.
этого хватит на 292 млрд лет.
А потом что?
Надеяться и молится, что к этому времени все успеют на 128 бит перейти?
Не в 2036 году, а 19 января 2038 года в 03:14:08 по всемирному времени, когда значение переменной типа time_t, отсчитывающей число секунд, прошедших с 1 января 1970 года, достигнет 2 в 31 степени (с) wiki
Я просто не могу понять, почему выбрано именно это число. Оно имеет какое-то особенное представление?
Нет, никакого. UNIX разработали в 70-е годы, создатели просто взяли последнюю на тот момент круглую дату для начала отсчета. Счетчик был 32-х разрядным, так что в него влезал период меньше 70 лет, поэтому взять какую-то отдаленную дату типа 0-го или даже 1900-го года было нельзя. А числа большей разрядности компьютеры 70-х считали сложно, медленно и печально. Так и повелось.
Представление этой даты в UNIX time это 0.
Нууу мне первое, что вспомнилось - это rand в плюсах. Он же выплевывает кол-во секунд с магической даты 1 января 1970 года.
rand выплевывает псевдослучайное число на основе seed.
srand и есть функция для инициализации seed.
time испрользуют в качестве seed, но не в качестве случайных чисел (ну по крайней мере никто в здравом уме).
Да, я зануда :-)
Это не магическая дата, это начало эпохи UNIX. Любая дата и время там выражается, как число секунд с 01.01.1970г.
У меня был вопрос, почему завязано именно на 70й год. Вполне возможно, я туплю (это мое нормальное состояние), но не понимаю..
В современных юникс-подобных осях используется уже 64 разрядное время, способное представить любую дату вплоть до 20-кратного возраста обозримой вселенной в обоих направлениях от 1970г.

