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

appcfg.py, инструмент, который загружает данные на Механизм Приложения, должен сделать точно это для аутентификации себя с сервером Механизма Приложения. Соответствующая функциональность абстрагирована в appengine_rpc.py. Короче говоря решение:

  1. Использование Google ClientLogin API для получения аутентификационного маркера. appengine_rpc.py делает это в , _GetAuthToken
  2. Отправляет подлинный маркер в специальный URL на Вашем приложении для Механизма Приложения. Та страница тогда возвращает cookie и 302 перенаправления. Проигнорируйте перенаправление и сохраните cookie. appcfg.py делает это в Использование _GetAuthCookie
  3. возвращенный cookie во всех будущих запросах.

можно также хотеть посмотреть _Authenticate, видеть, как appcfg обрабатывает различные коды возврата от ClientLogin, и _GetOpener, чтобы видеть, как appcfg создает urllib2 OpenerDirector, который не следует за перенаправлениями HTTP. Или Вы могли, на самом деле, просто использовать оптовую торговлю классами AbstractRpcServer и HttpRpcServer, так как они делают в значительной степени все, в чем Вы нуждаетесь.

26
задан Shoe 4 May 2011 в 05:54
поделиться

3 ответа

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

20
ответ дан 28 November 2019 в 07:16
поделиться

из-за ограничения типа данных INT на 32-битной машине

http://php.net/manual/en/function.mktime.php

из php.net: «Максимально возможная дата, принятая mktime () и gmmktime (), зависит от текущего часового пояса местоположения.

Например, переполнение 32-битной метки времени происходит в 2038-01-19T03: 14: 08 + 0000Z. Но если вы находитесь в часовом поясе UTC-0500 (например, EST в Северной Америке), максимальное допустимое время до переполнения (для более старых версий PHP в Windows) составляет 2038-01-18T22: 14: 07-0500Z, независимо от того, передаете ли вы его в mktime () или gmmktime (). "

3
ответ дан 28 November 2019 в 07:16
поделиться

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

0
ответ дан 28 November 2019 в 07:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: