242 votes

Comment obtenir les secondes depuis l'époque à partir de la sortie heure + date de gmtime() ?

Comment faites-vous pour inverser gmtime() où vous mettez l'heure + la date et obtenez le nombre de secondes ?

J'ai des chaînes de caractères comme 'Jul 9, 2009 @ 20:02:58 UTC' et je veux récupérer le nombre de secondes entre l'époque et le 9 juillet 2009.

J'ai essayé time.strftime mais je ne sais pas comment l'utiliser correctement, ni si c'est la bonne commande à utiliser.

876voto

naren Points 1378

Utilisez le temps module :

import time    
epoch_time = int(time.time())

21 votes

@DanJ : c'est le nombre de secondes écoulées depuis l'époque (un moment fixe dans le temps) et c'est le même dans tous les fuseaux horaires. Cependant, si nous ignorons les instances temporelles autour des secondes intercalaires, il est facile de le convertir en UTC si time utilise l'époque d'Unix (1970).

77 votes

Notez que ce n'est pas ce que l'OP demandait, mais c'est ce que I recherché. Donc +1.

12 votes

C'est la réponse à ce qui est demandé dans le titre : "obtenir le temps depuis l'époque". +1

156voto

nmichaels Points 21955

Si vous êtes arrivé ici parce qu'un moteur de recherche vous a dit que c'était la façon d'obtenir l'horodatage Unix, arrêtez de lire cette réponse. Remontez d'un cran.

Si vous voulez inverser time.gmtime() vous voulez calendar.timegm() .

>>> calendar.timegm(time.gmtime())
1293581619.0

Vous pouvez transformer votre chaîne en un tuple de temps avec time.strptime() qui renvoie un tuple de temps que vous pouvez passer à calendar.timegm() :

>>> import calendar
>>> import time
>>> calendar.timegm(time.strptime('Jul 9, 2009 @ 20:02:58 UTC', '%b %d, %Y @ %H:%M:%S UTC'))
1247169778

Plus d'informations sur le module de calendrier aquí

24 votes

Si vous cherchez le temps d'époque actuel d'unix, veuillez vous référer au commentaire de @DanJ ou à la réponse de naren, cette réponse est incorrecte !

2 votes

Des réponses comme ça me font rire. Je ne sais pas exactement pourquoi. J'ai l'impression d'être un ballon de basket.

2 votes

@NathanChappell L'optimisation des moteurs de recherche est bizarre, et "comment obtenir des secondes depuis l'époque" est la seule partie de la question que beaucoup de gens lisent. Voir le commentaire ci-dessus suggérant que cette réponse est incorrecte, puisqu'elle répond à la question qui a été réellement posée.

10voto

unutbu Points 222216

Notez que time.gmtime horodatage des cartes 0 a 1970-1-1 00:00:00 .

In [61]: import time       
In [63]: time.gmtime(0)
Out[63]: time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

time.mktime(time.gmtime(0)) vous donne un timestamp décalé d'une quantité qui dépend de votre locale, qui en général peut être différente de 0.

In [64]: time.mktime(time.gmtime(0))
Out[64]: 18000.0

L'inverse de time.gmtime es calendar.timegm :

In [62]: import calendar    
In [65]: calendar.timegm(time.gmtime(0))
Out[65]: 0

0 votes

Cela donne une meilleure explication et un meilleur exemple que time.mktime (qui prend en compte le fuseau horaire actuel), merci.

0 votes

@Jkm : ne pas utiliser mktime() con gmtime() . mktime() accepte votre heure locale mais gmtime() renvoie à Heure UTC -- Votre fuseau horaire local peut et est susceptible d'être différent. "timestamp relatif à votre locale" est un non-sens : L'horodatage POSIX ne dépend pas de votre locale (fuseau horaire local) -- c'est la même valeur partout dans le monde. "secondes depuis l'époque" est l'horodatage POSIX dans la plupart des cas (même sous Windows) -- les choses comme les fuseaux horaires "corrects" qui utilisent l'échelle de temps TAI ne sont pas courantes. Voir La fonction time.time() de Python renvoie-t-elle l'horodatage local ou UTC ?

0 votes

@J.F. Sebastian Vous avez raison. En fait, j'ai quelques problèmes concernant mktime() récemment. Pour certains serveurs web en python (Tornado par exemple), comme le processus continue de tourner, même si je change la locale du système, la fonction mktime() appelé par l'API du serveur web utilise toujours le ancien fuseau horaire pour générer l'objet temps. Je dois passer à gmtime() et appliquer manuellement le décalage gmt.

5voto

Falmarri Points 20281
t = datetime.strptime('Jul 9, 2009 @ 20:02:58 UTC',"%b %d, %Y @ %H:%M:%S %Z")

0 votes

Je ne peux pas accéder à strptime pour une raison quelconque. J'ai importé datetime

1 votes

@calccrypto vous devez soit from datetime import datetime ou faire datetime.datetime.strptime

3voto

Evan Mulawski Points 28536

Il y a deux façons de procéder, en fonction de votre horodatage d'origine :

mktime() y timegm()

http://docs.python.org/library/time.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X