Почему временные метки ограничены 2038 годом?

StackOverflow https://stackoverflow.com/questions/5879173

  •  28-10-2019
  •  | 
  •  

Вопрос

Я только что узнал, запустив скрипт календаря, что временные метки в PHP имеют ограничение до 2038. Что это на самом деле означает?Почему 2038 вместо 2050 или 2039?Зачем нужен предел, если временные метки просто отсчитывают секунды от заданной даты (1970 г.)?

Это было полезно?

Решение

Ограничение налагается 4-байтовыми целыми числами со знаком, которые большинство библиотек C используют для представления этого числа.Быстрые вычисления (предполагается, что 365 дней в году, не совсем правильно):

родовое слово

Это также подразумевает нижний предел ~ 1900.Некоторые библиотеки начали вводить 64-битный счетчик эпох, но на данный момент их немного, и они очень редки.

Другие советы

Максимальное значение 32-битного целого числа - 2 147 483 647.Если к этому добавить +1, получится -2 147 483 647.2147483647 секунд с 01-01-1970 00:00:00 - это 19 января 2038 года. Если вы добавите еще одну секунду, вы получите дату где-то в 1902 году.

Я предполагаю, что он хранится в фиксированном количестве бит, что означает ограничение на размер временной метки.Мы могли бы вычислить, чтобы выяснить это точно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top