J'essaie d'utiliser strftime () à la précision microseconde, ce qui semble possible avec% f (comme indiqué ici ). Cependant, lorsque j'essaie le code suivant:
import time
import strftime from time
print strftime("%H:%M:%S.%f")
... J'ai l'heure, les minutes et les secondes, mais% f est imprimé sous forme de% f, sans aucun signe des microsecondes. J'utilise Python 2.6.5 sur Ubuntu, donc ça devrait aller et% f devrait être supporté (il est supporté pour les versions 2.6 et supérieures, à ma connaissance.)
Vous pouvez utiliser la fonction strftime de datetime pour l'obtenir. Le problème est que strftime accepte une heure qui ne porte pas d'informations en microsecondes.
from datetime import datetime
datetime.now().strftime("%H:%M:%S.%f")
Devrait faire l'affaire!
Vous regardez la mauvaise documentation. Le module time
possède une documentation différente .
Vous pouvez utiliser le module datetime
strftime
comme ceci:
>>> from datetime import datetime
>>>
>>> now = datetime.now()
>>> now.strftime("%H:%M:%S.%f")
'12:19:40.948000'
Cela devrait faire le travail
import datetime
datetime.datetime.now().strftime("%H:%M:%S.%f")
Il va imprimer
HH:MM:SS.microseconds
comme ceci par exemple 14:38:19.425961
Vous pouvez également obtenir une précision en microsecondes à partir du module time
à l'aide de sa fonction time()
.
(time.time()
renvoie le temps en secondes depuis Epoch. Sa partie décimale est le temps en microsecondes, comme vous le souhaitez.)
>>> from time import time
>>> time()
... 1310554308.287459 # the fractional part is what you want.
# comparision with strftime -
>>> from datetime import datetime
>>> from time import time
>>> datetime.now().strftime("%f"), time()
... ('287389', 1310554310.287459)
Avec le module time
de Python, vous ne pouvez pas obtenir de microsecondes avec %f
.
Pour ceux qui souhaitent toujours utiliser le module time
uniquement, voici une solution de contournement:
now = time.time()
mlsec = repr(now).split('.')[1][:3]
print time.strftime("%Y-%m-%d %H:%M:%S.{} %Z".format(mlsec), time.localtime(now))
Vous devriez obtenir quelque chose comme 2017-01-16 16: 42: 34.625 EET (oui, j'utilise des millisecondes car c'est assez suffisant).
Pour diviser le code en détails, collez le code ci-dessous dans une console Python:
import time
# Get current timestamp
now = time.time()
# Debug now
now
print now
type(now)
# Debug strf time
struct_now = time.localtime(now)
print struct_now
type(struct_now)
# Print nicely formatted date
print time.strftime("%Y-%m-%d %H:%M:%S %Z", struct_now)
# Get miliseconds
mlsec = repr(now).split('.')[1][:3]
print mlsec
# Get your required timestamp string
timestamp = time.strftime("%Y-%m-%d %H:%M:%S.{} %Z".format(mlsec), struct_now)
print timestamp
Par souci de clarté, je colle également mon résultat Python 2.7.12 ici:
>>> import time
>>> # get current timestamp
... now = time.time()
>>> # debug now
... now
1484578293.519106
>>> print now
1484578293.52
>>> type(now)
<type 'float'>
>>> # debug strf time
... struct_now = time.localtime(now)
>>> print struct_now
time.struct_time(tm_year=2017, tm_mon=1, tm_mday=16, tm_hour=16, tm_min=51, tm_sec=33, tm_wday=0, tm_yday=16, tm_isdst=0)
>>> type(struct_now)
<type 'time.struct_time'>
>>> # print nicely formatted date
... print time.strftime("%Y-%m-%d %H:%M:%S %Z", struct_now)
2017-01-16 16:51:33 EET
>>> # get miliseconds
... mlsec = repr(now).split('.')[1][:3]
>>> print mlsec
519
>>> # get your required timestamp string
... timestamp = time.strftime("%Y-%m-%d %H:%M:%S.{} %Z".format(mlsec), struct_now)
>>> print timestamp
2017-01-16 16:51:33.519 EET
>>>
Si le "% f" pour les micro-secondes ne fonctionne pas, appliquez la méthode suivante:
import datetime
def getTimeStamp():
dt = datetime.datetime.now()
return dt.strftime("%Y%j%H%M%S") + str(dt.microsecond)
Si vous voulez de la vitesse, essayez ceci:
def _timestamp(prec=0):
t = time.time()
s = time.strftime("%H:%M:%S", time.localtime(t))
if prec > 0:
s += ("%.9f" % (t % 1,))[1:2+prec]
return s
Où prec
est la précision - le nombre de décimales que vous souhaitez. Veuillez noter que la fonction n’a pas de problèmes avec les zéros non significatifs dans une partie fractionnaire, contrairement à d’autres solutions présentées ici.