Мне нужно создать временную метку UNIX в UTC, поэтому я использую time.time()
для ее создания.
Нужно ли мне что-либо делать или автоматическая отметка времени в UTC?
Python time.time() возвращает метку времени в UTC?
Ответ 1
Технически time.time()
не указывает и практически, по крайней мере в CPython, возвращает метку времени в любом формате, используемом базовой стандартной библиотекой C time
.
Стандарт C (который не является свободно доступным) не говорит о том, является ли это GMT, а также не существует стандарта POSIX. Он просто говорит:
Функция
time()
должна возвращать значение времени в секундах с момента Эпохи.
... ничего не говоря о часовом поясе, за исключением того, что вы можете передать его localtime
или gmtime
, чтобы получить "время простоя" в локальных или GMT-часовых поясах.
Итак, это зависит от платформы. Платформа может вернуть все, что она хочет, для time
, если она делает это так, чтобы localtime
и gmtime
работали правильно.
Это, как говорится, обычно будет GMT-или, скорее, UTC (Windows) или UTC-except-for-leap-seconds (большинство других платформ). Например, FreeBSD говорит:
Функция
time()
возвращает значение времени в секундах с 0 часов, 0 минут, 0 секунд, 1 января 1970 года, скоординированное всеобщее время без включения секунд прыжка.
OS X и большинство других * BSD имеют ту же самую manpage, Windows и linux/glibc также специально вернуть UTC (с секундами или без него) и т.д.
Кроме того, в документации Python говорится:
Чтобы узнать, что такое эпоха, посмотрите
gmtime(0)
.
Полагая это вместе с определениями для time
и gmtime
, было бы гораздо больше работать, чтобы платформа возвращала локальные временные метки, чем GMT. (Говоря это, это утверждение не может быть настолько авторитетным, потому что это фактически не совсем верно для любой платформы POSIX, благодаря прыжковым секундам.)
Ответ 2
time.time()
возвращает секунды с эпохи, поэтому не определяет, какое время используется стандарт или зона.
Преобразование в стандарты времени с использованием:
-
time.localtime([secs])
- Локальное время, определенное вашей операционной системой -
time.gmtime([secs])
- UTC
Оба они возвращают time.struct_time
.
>>> t = time.time()
>>> time.localtime(t)
time.struct_time(tm_year=2013, tm_mon=5, tm_mday=15, tm_hour=2, tm_min=41, tm_sec=49, tm_wday=2, tm_yday=135, tm_isdst=1)
>>> time.gmtime(t)
time.struct_time(tm_year=2013, tm_mon=5, tm_mday=15, tm_hour=0, tm_min=41, tm_sec=49, tm_wday=2, tm_yday=135, tm_isdst=0)