web-dev-qa-db-fra.com

Time.time () de Python renvoie-t-il l'horodatage local ou UTC?

time.time() dans le module Python time renvoie-t-il l'heure du système ou l'heure UTC?

510
Saransh Mohapatra

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.

727
squiguy

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

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.

125
Rudi Strydom

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?

26
jfs

Je me suis finalement installé pour:

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

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.

2
HyperNeutrino

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