Как работает метод python time.time()?

Метод time.time() предоставляет вам временную метку, которая в основном является временем, прошедшим с эпохи (которое находится в формате UTC).

В datetime.fromtimestamp() указано, что если параметр tz не указан, возвращается локальный объект datetime.

Мне известно, что информация tz в основном рассматривается как смещение к utc, чтобы получить локальное время.

Если это случай, текущее время в utc должно быть извлечено из платформы.

Как текущее время дня, будь то локальное или UTC, извлечено из базовой платформы?

Ответ 1

В (текущем) вызове CPython time.time() floattime(NULL), который вызывает _PyTime_gettimeofday_info(), который вызывает pygettimeofday()
где pygettimeofday() может использовать GetSystemTimeAsFileTime(), clock_gettime(CLOCK_REALTIME), gettimeofday() в зависимости от платформы.


Несвязанный: time.time() возвращает "секунды с эпохи" . Это время POSIX для большинства систем, поддерживаемых Python (Linux, OS X, Windows). POSIX timestamp - это не количество прошедших SI секунд с 1970-01-01T00:00:00Z (Epoch). Хотя он очень близок (в пределах 0,000003% от Epoch). Он подсчитывает количество секунд без скачка или количество секунд UT1 (средне-солнечных).

UTC не является линейным временным масштабом относительно TAI, временными шкалами GPS (см. изображение). Вы не получите точные истекшие секунды SI из-за скачков секунд (UTC сохраняется в пределах ± 0,9 секунды UT1 (вращение Земли)). См. Также Является ли день всегда 86 400 секунд в секунду?

Некоторые операционные системы могут быть настроены на использование "правого" zoneinfo не-POSIX. time.time() не требуется возвращать метку времени POSIX в этом случае. "правый" часовой пояс подсчитывает секунды прыжка, и поэтому разница между "правильными" метками времени и временными метками POSIX не является постоянной, например, она будет увеличиваться в июль 2015 года из-за введения положительной секунды скачка.

В принципе, "эпоха" может отличаться от эпохи POSIX, хотя Python не поддерживает такие системы.