web-dev-qa-db-fra.com

Comment obtenir min, secondes et millisecondes à partir de datetime.now () en python?

>>> a = str(datetime.now())
>>> a
'2012-03-22 11:16:11.343000'

J'ai besoin d'une chaîne comme celle-ci: '16:11.34'.

Devrait être aussi compact que possible. 

Ou devrais-je utiliser time () à la place? Comment l'obtenir?

14
Prostak

Qu'en est-il de:

datetime.now().strftime('%M:%S.%f')[:-4]

Je ne suis pas sûr de comprendre ce que vous entendez par "Millisecondes seulement 2 chiffres", mais cela devrait le garder à 2 décimales. Il peut y avoir un moyen plus élégant de manipuler la chaîne de formatage strftime pour réduire également la précision - je ne suis pas tout à fait sûr.

EDIT

Si le modificateur %f ne fonctionne pas pour vous, vous pouvez essayer quelque chose comme:

now=datetime.now()
string_i_want=('%02d:%02d.%d'%(now.minute,now.second,now.microsecond))[:-4]

Encore une fois, je suppose que vous voulez simplement tronquer la précision.

26
mgilson

Cette solution est très similaire à celle fournie par @ gdw2, sauf que le formatage de la chaîne est correctement effectué pour correspondre à ce que vous avez demandé - "devrait être aussi compact que possible"

>>> import datetime
>>> a = datetime.datetime.now()
>>> "%s:%s.%s" % (a.minute, a.second, str(a.microsecond)[:2])
'31:45.57'
5
Pythomania

Une autre solution similaire:

>>> a=datetime.now()
>>> "%s:%s.%s" % (a.hour, a.minute, a.microsecond)
'14:28.971209'

Oui, je sais que le formatage de la chaîne n’est pas parfait.

1
gdw2
import datetime from datetime

now = datetime.now()

print "%0.2d:%0.2d:%0.2d" % (now.hour, now.minute, now.second)

Vous pouvez faire la même chose avec le jour et le mois, etc. 

1
B.Welboren

Désolé d'ouvrir un ancien fil de discussion, mais je poste au cas où cela aiderait quelqu'un. Cela semble être le moyen le plus simple de le faire dans Python 3. 

from datetime import datetime

Date = str(datetime.now())[:10]
Hour = str(datetime.now())[11:13]
Minute = str(datetime.now())[14:16]
Second = str(datetime.now())[17:19]
Millisecond = str(datetime.now())[20:]

Si vous avez besoin des valeurs sous forme de nombre, exprimez-les simplement comme un entier, par exemple.

Hour = int(str(datetime.now())[11:13])
0
Adam Morris

time.second aide beaucoup à mettre cela au sommet de votre python.

0
timothy timer

si vous voulez que votre datetime.now() soit précis jusqu'à la minute, vous pouvez utiliser

datetime.strptime(datetime.now().strftime('%Y-%m-%d %H:%M'), '%Y-%m-%d %H:%M')

de même pour l'heure, il sera 

datetime.strptime(datetime.now().strftime('%Y-%m-%d %H'), '%Y-%m-%d %H')

C'est une sorte de bidouille, si quelqu'un a une meilleure solution, je suis tout ouïe

0
Rajdeep Mukherjee