Время в Python.time () возвращает локальную или UTC метку времени?

тут time.time() в модуле времени Python возвращает время системы или время в UTC?

6 ответов


на time.time() функция возвращает количество секунд с начала эпохи, как секунды. Обратите внимание, что" эпоха " определяется как начало 1 января 1970 года в UTC. Таким образом, эпоха определяется в терминах UTC и устанавливает глобальный момент времени. Независимо от того, где вы находитесь " секунды прошедшей эпохи "(время.time ()) возвращает одно и то же значение в один и тот же момент.

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

Python 2.7.3 (default, Apr 24 2012, 00:00:54) 
[GCC 4.7.0 20120414 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> ts = time.time()
>>> print ts
1355563265.81
>>> import datetime
>>> st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
>>> print st
2012-12-15 01:21:05
>>>

на ts переменная-это время, возвращаемое в секундах. Затем я преобразовал его в строку, используя datetime библиотека делает его строкой, которая читается человеком.


это текстовом виде типа timestamp это можно использовать в ваших текстовых файлах. (В прошлом название вопроса было другим, поэтому введение к этому ответу было изменено, чтобы уточнить, как его можно интерпретировать в то время. [обновлено 2016-01-14])

вы можете получить метку времени в виде строки, используя .now() или .utcnow() на datetime.datetime:

>>> import datetime
>>> print datetime.datetime.utcnow()
2012-12-15 10:14:51.898000

на now отличается от utcnow как и ожидалось-в противном случае они работают одинаково путь:

>>> print datetime.datetime.now()
2012-12-15 11:15:09.205000

вы можете отобразить метку времени в строке явно:

>>> str(datetime.datetime.now())
'2012-12-15 11:15:24.984000'

или вы можете быть еще более явным, чтобы отформатировать метку времени так, как вам нравится:

>>> datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p")
'Saturday, 15. December 2012 11:19AM'

если вы хотите формат ISO, используйте .isoformat() метод объекта:

>>> datetime.datetime.now().isoformat()
'2013-11-18T08:18:31.809000'

вы можете использовать их в переменных для вычислений и печати без преобразований.

>>> ts = datetime.datetime.now()
>>> tf = datetime.datetime.now()
>>> te = tf - ts
>>> print ts
2015-04-21 12:02:19.209915
>>> print tf
2015-04-21 12:02:30.449895
>>> print te
0:00:11.239980

основываясь на ответе от #squiguy, чтобы получить истинную метку времени, я бы набрал ее из float.

>>> import time
>>> ts = int(time.time())
>>> print(ts)
1389177318

по крайней мере это понятие.


ответ может быть ни тем, ни другим.

  • ни: time.time() возвращает примерное количество секунд, прошедших с начала эпохи. Результат не зависит от часового пояса, поэтому он не является ни UTC, ни местным временем. Вот!--8-->определение POSIX Для "секунд с эпохи".

  • как: time.time() не требует синхронизации часов вашей системы, поэтому он отражает ее значение (хотя это не имеет ничего общего с локальным часовым поясом). Разные компьютеры могут получать разные результаты одновременно. С другой стороны, если ваш компьютер время is synchronized тогда легко получить время UTC от метки времени (если мы игнорируем високосные секунды):

    from datetime import datetime
    
    utc_dt = datetime.utcfromtimestamp(timestamp)
    

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


в конце концов я остановился на:

>>> import time
>>> time.mktime(time.gmtime())
1509467455.0

нет такой вещи, как "эпоха" в определенном часовом поясе. Эпоха четко определено в конкретный момент времени, поэтому, если вы измените часовой пояс, само время изменилось. В частности, на этот раз Jan 1 1970 00:00:00 UTC. Так что time.time() возвращает количество секунд с начала эпохи.