web-dev-qa-db-fra.com

Utilisation de% f avec strftime () dans Python pour obtenir des microsecondes

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

101
user820924

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!

158
adamnfish

Vous regardez la mauvaise documentation. Le module timepossède une documentation différente .

Vous pouvez utiliser le module datetimestrftime comme ceci:

>>> from datetime import datetime
>>>
>>> now = datetime.now()
>>> now.strftime("%H:%M:%S.%f")
'12:19:40.948000'
32
Jochen Ritzel

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

6
salah Laaroussi

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)
5
Pushpak Dagade

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

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)
3
user2189872

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

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.

0
mato