Python's time.time() retorna o timestamp local ou UTC?

O time.time() no módulo de tempo Python retorna o tempo do sistema's ou o tempo em UTC?

Solução

A função time.time() retorna o número de segundos desde a época, como segundos. Note que a função "epoch" é definida como o início de 1 de janeiro de 1970 no UTC. Então a época é definida em termos de UTC e estabelece um momento global no tempo. Não importa onde você está "segundos depois de epoch" (time.time()) retorna o mesmo valor no mesmo momento.

Aqui está um exemplo de saída que eu executei no meu computador, convertendo-o também para uma string.

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
>>>

A variável ts' é o tempo retornado em segundos. Eu então a converti para uma string utilizando a bibliotecadatetime', tornando-a uma string legível por humanos.

Comentários (12)

Isto é para a forma de texto de um carimbo da hora que pode ser usado nos seus ficheiros de texto. (O título da pergunta era diferente no passado, por isso a introdução a esta resposta foi alterada para esclarecer como poderia ser interpretada como a hora. atualizado 2016-01-14])

Você pode obter o carimbo da hora como uma string utilizando o .now() ou .utcnow() do `datetime.datetime':

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

O now difere do utcnow como esperado -- caso contrário eles funcionam da mesma maneira:

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

Você pode renderizar explicitamente o carimbo da hora para a corda:

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

Ou você pode ser ainda mais explícito para formatar o timestamp da maneira que você gosta:

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

Se você quiser o formato ISO, utilize o método .isoformat() do objeto:

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

Você pode usá-los em variáveis para cálculos e impressão sem conversões.

>>> 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
Comentários (6)

Baseado na resposta do #squiguy, para obter um verdadeiro timestamp, eu digitaria a partir do float.

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

Pelo menos esse's o conceito.

Comentários (9)