Почему максимальная поддерживаемая дата для _gmtime32 и _gmtime64 приходится на 19 января в разные годы? - PullRequest
0 голосов
/ 09 января 2019

Хорошо известно, что подписанный 32-разрядный time_t закончится 19 января 2038 года (проблема Y2038 ).

Функция Windows _gmtime64 принимает 64-битную time_t, поэтому в принципе она может поддерживать значительно больший диапазон дат. Но оказывается, что он не поддерживает даты после 3000 года. В частности, наибольшее значение time_t, которое может быть успешно передано _gmtime64, равно 32536846799, то есть 19 января 3001 года.

Это просто совпадение, что эти два, по-видимому, не связанных диапазона заканчиваются 19 января? Почему _gmtime64 заканчивается, когда это происходит?


Python-код для вычисления наибольшего допустимого time_t:

In [1]: from time import gmtime

# invariant: gmtime(low) is ok, gmtime(high) fails
In [2]: low, high = 0, 100000000000

In [3]: while high - low > 1:
   ...:     midpoint = low + (high - low) // 2
   ...:     try:
   ...:         gmtime(midpoint)
   ...:     except OSError:
   ...:         high = midpoint
   ...:     else:
   ...:         low = midpoint
   ...:

In [4]: low
Out[4]: 32536846799
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...