Вопрос по python, timezone, datetime, time – Является ли Python time.time () часовым поясом?

30

Извиняюсь за то, что задал слишком простой вопрос, но я не смог его очистить после прочтения документов. Просто мне кажется, что я что-то упустил или неправильно понял здесь.

Звонитtime.time() из разных часовых поясов, в то же время дают разные результаты? Это может сводиться к определениюepochв документах (и в моих не очень глубоких поисках в Интернете) нет упоминания о часовом поясе.

Также предположим, что time.time () был вызван из мест с разными часовыми поясами и преобразован в UTCdatetimes на своих машинах, они все будут давать то же время UTC?

Таким образом, вызов time () с машин с разными часовыми поясами может не совпадать, учитывая наличие дополнительных секунд и точности, которые являются настраиваемыми / зависящими от системы. Но для большей части системы это будет то же самое. Правильно ли мое заключение? 0xc0de
Также почти все ответы (атм) частично отвечают на мой вопрос, я выберу тот, который является более полным. 0xc0de
+1 Отличный вопрос, учитывая количество неправильных ответов :-) Aaron Digulla

Ваш Ответ

5   ответов
3

документация:

Return the time in seconds since the epoch as a floating point number. Note that even though the time is always returned as a floating point number, not all systems provide time with a better precision than 1 second. While this function normally returns non-decreasing values, it can return a lower value than a previous call if the system clock has been set back between the two calls.

Википедия говорит о & quot;Эпоха Unix& Quot ;:

The Unix epoch is the time 00:00:00 UTC on 1 January 1970 (or 1970-01-01T00:00:00Z ISO 8601).

и это продолжается

There is a problem with this definition, in that UTC did not exist in its current form until 1972; this issue is discussed below. For brevity, the remainder of this section uses ISO 8601 date format, in which the Unix epoch is 1970-01-01T00:00:00Z.

Время и дата это весело.

Малоизвестный факт: часовой пояс Швейцарии до 1894 года составлял 34:08 (34 минуты и 8 секунд). сле июня 1894 года он был обновлен до 29:44. (ссылка на сайт)

Да, редактирование здесь более заметно в контексте 0xc0de
@AaronDigulla: Ваше изменение добавляет так много к этому ответу, что это больше не RobB. Если бы я был автором, я не был бы признателен за такое обширное редактирование. Было бы лучше написать длинный комментарий или отдельный ответ.
@StevenRumbalski: отметил.
1

Most of the functions defined in this module call platform C library functions with the same name. It may sometimes be helpful to consult the platform documentation, because the semantics of these functions varies among pla,tforms.

http://docs.python.org/library/time.html?highlight=time.time#module-time

Таким образом, ответ: это зависит.

Это зависит от условийtime() в котором говорится: «time () возвращает время как количество секунд с начала эпохи, 1970-01-01 00:00:00 +0000 (UTC.) & Quot;
19

time.time() возвращает количество секунд с момента неуказанногоepoch, Обратите внимание, что на большинстве систем этоnot включить дополнительные секунды, хотя этоможно настроить системные часы, чтобы включить их, На cpython,time.time реализован как вызов функции Ctimeчто в соответствии с 27.23.2.4.2 изСтандарт C не должен использовать указанную эпоху:

The time function determines the current calendar time. The encoding of the value is unspecified.

Практически во всех ОС (включая Linux, Mac OSX, Windows и все другие Unixes) эпоха1970-1-1, 00:00 UTCи на этих системахtime.time являетсяtimezone-independent.

time () возвращает & quot; time () возвращает время как количество секунд с начала эпохи, 1970-01-01 00:00:00 +0000 (UTC). & quot; согласно странице времени (2).
@AaronDigulla Оказывается, time.time использует ту же эпоху и в Windows. Только небольшое меньшинство систем на самом деле возвращает время как количество секунд с начала эпохи - большинство пропускают високосные секунды. Отtime(2): This value is not the same as the actual number of seconds between the time and the Epoch (...).
@AaronDigulla О, вы совершенно правы. Исправлена. Обратите внимание, чтоtime(2) теоретически зависит от ОС.
Это одинаково для всех систем на основе Unix, поэтому только Windows и MacOS & lt; Х мог вести себя по-другому.
1

time.time() возвращает количество секунд, прошедшее с начала эпохи UNIX в 0:00 UTC, 1 января 1970 года. Предполагая, что на компьютерах установлены правильные часы, возвращается одинаковое значение на каждой машине.

+1. & quot; Предположим, что на часах машины установлены правильно ... & quot;
gmtime() работает наstruct_time в то время какtime() работает на секундах. И в документации сказаноgmtime() такой же какgmtime(time())
Да,gmtime преобразует количество секунд в соответствующее UTC struct_time. Не уверен, насколько это относится к вопросу.
2

так как это смещение в секундах до эпохи UNIX.

При этом, если вы преобразуете его в дату, используя разные часовые пояса, значения, конечно, будут отличаться.

Если из этих дат вы конвертируете каждое из них в UTC, то результат должен быть одинаковым.

+1 для простоты. 0xc0de

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