time.time()
dans le module Python time renvoie-t-il l'heure du système ou l'heure UTC?
La fonction time.time()
renvoie le nombre de secondes écoulées depuis l’époque, en secondes. Notez que "l'époque" est définie comme le début du 1er janvier 1970 en UTC. Ainsi, l’époque est définie en termes d’UTC et établit un moment global dans le temps. Peu importe où vous êtes "secondes après Epoch" (time.time ()) renvoie la même valeur au même moment.
Voici un exemple de sortie que j’ai exécuté sur mon ordinateur, le convertissant également en chaîne.
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 renvoyé en secondes. Je l'ai ensuite convertie en chaîne à l'aide de la bibliothèque datetime
, ce qui en fait une chaîne lisible par l'homme.
Ceci est pour le forme de texte d'un horodatage qui peut être utilisé dans vos fichiers texte. (Le titre de la question était différent dans le passé. L'introduction de cette réponse a donc été modifiée pour clarifier la manière dont elle pourrait être interprétée comme l'heure. [Mis à jour le 14/01/2016])
Vous pouvez obtenir l'horodatage sous forme de chaîne à l'aide de .now()
ou .utcnow()
du datetime.datetime
:
>>> import datetime
>>> print datetime.datetime.utcnow()
2012-12-15 10:14:51.898000
La 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 l'horodatage à 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 des calculs et des impressions sans conversions.
>>> 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
Sur la base de la réponse de #squiguy, pour obtenir un horodatage réel, saisissez le lancer à partir de float.
>>> import time
>>> ts = int(time.time())
>>> print(ts)
1389177318
Au moins c'est le concept.
La réponse pourrait être ni l'un ni l'autre.
ni: time.time()
renvoie approximativement le nombre de secondes écoulées depuis l'époque. Le résultat ne dépend pas du fuseau horaire, il ne s'agit donc ni de l'heure UTC ni de l'heure locale. Voici définition POSIX pour "secondes depuis l'époque" .
les deux: time.time()
ne nécessite pas que l'horloge de votre système soit synchronisée, elle reflète donc sa valeur (bien que cela n'ait rien à voir avec le fuseau horaire local). Différents ordinateurs peuvent obtenir des résultats différents en même temps. Par contre, si l'heure de votre ordinateur est synchronisée, il est facile d'obtenir l'heure UTC à partir de l'horodatage (si nous ignorons les secondes intercalaires):
from datetime import datetime
utc_dt = datetime.utcfromtimestamp(timestamp)
Pour obtenir des horodatages à partir de l'heure UTC dans diverses versions de Python, voir Comment puis-je convertir une date en secondes depuis Epoch selon l'UTC?
Je me suis finalement installé pour:
>>> import time
>>> time.mktime(time.gmtime())
1509467455.0
Une "époque" n’existe pas dans un fuseau horaire spécifique. L’époque est bien définie comme un moment précis dans le temps. Par conséquent, si vous modifiez le fuseau horaire, le temps lui-même change également. Plus précisément, il s’agit de Jan 1 1970 00:00:00 UTC
. Donc, time.time()
renvoie le nombre de secondes écoulées depuis l'époque.
l'horodatage est toujours l'heure en utc, mais lorsque vous appelez datetime.datetime.fromtimestamp
, il vous renvoie l'heure dans votre fuseau horaire local correspondant à cet horodatage. Le résultat dépend donc de votre environnement local.
>>> import time, datetime, arrow
>>> time.time()
1564494136.0434234
>>> datetime.datetime.now()
datetime.datetime(2019, 7, 30, 16, 42, 3, 899179)
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2019, 7, 30, 16, 43, 12, 4610)
Il existe une belle bibliothèque arrow
avec un comportement différent. Dans le même cas, il renvoie votre objet temps avec le fuseau horaire UTC.
>>> arrow.now()
<Arrow [2019-07-30T16:43:27.868760+03:00]>
>>> arrow.get(time.time())
<Arrow [2019-07-30T13:43:56.565342+00:00]>