La fonction time.time() de Python renvoie-t-elle l'horodatage local ou UTC ?

Est-ce que time.time() dans le module de temps Python renvoie l'heure du système ou l'heure en UTC ?

Solution

La fonction [time.time()][1] renvoie le nombre de secondes écoulées depuis l'époque, sous forme de secondes. Notez que l' "époque&quot ; est définie comme le début du 1er janvier 1970 en UTC. L'époque est donc définie en termes d'UTC et établit un moment global dans le temps. Quel que soit l'endroit où vous vous trouvez, "seconds past epoch&quot ; (time.time()) renvoie la même valeur au même moment.

Voici un exemple de sortie que j'ai exécuté sur mon ordinateur, en le convertissant également en chaîne de caractères.

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

La variable ts est le temps retourné en secondes. Je l'ai ensuite converti en une chaîne de caractères en utilisant la bibliothèque datetime, ce qui en fait une chaîne lisible par l'homme.

[1] : https://docs.python.org/2/library/time.html#time.time

Commentaires (12)

Il s'agit de la forme textuelle d'un timestamp qui peut être utilisée dans vos fichiers texte. (Le titre de la question était différent dans le passé, donc l'introduction de cette réponse a été modifiée pour clarifier comment il pourrait être interprété comme l'heure. [mise à jour 2016-01-14])

Vous pouvez obtenir l'horodatage sous forme de chaîne en utilisant les fonctions .now() ou .utcnow() de datetime.datetime :

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

Le now diffère de utcnow comme prévu -- sinon ils fonctionnent de la même manière :

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

Vous pouvez rendre le timestamp à la chaîne explicitement :

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

Ou vous pouvez être encore plus explicite pour formater l'horodatage comme vous le souhaitez :

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

Si vous voulez le format ISO, utilisez la méthode .isoformat() de l'objet :

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

Vous pouvez les utiliser dans des variables pour les calculs et l'impression sans conversion.

>>> 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
Commentaires (6)

En se basant sur la réponse de #squiguy, pour obtenir un véritable horodatage, il faudrait le taper à partir de float.

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

Du moins, c'est le concept.

Commentaires (9)