¿Cómo obtener min, segundos y milisegundos de datetime.now () en python?

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

Necesito obtener una cadena como esa: '16:11.34' .

Debe ser lo más compacto posible.

¿O debería usar time () en su lugar? ¿Como lo consigo?

Qué pasa:

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

No estoy seguro de lo que quiere decir con “milisegundos solo 2 dígitos”, pero esto debería mantenerlo en dos decimales. Puede haber una forma más elegante manipulando la cadena de formato strftime para reducir la precisión también. No estoy completamente seguro.

EDITAR

Si el modificador %f no funciona para usted, puede intentar algo como:

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

Una vez más, supongo que solo quieres truncar la precisión.

Esta solución es muy similar a la proporcionada por @ gdw2, solo que el formato de cadena se realiza correctamente para que coincida con lo que pidió: “Debería ser lo más compacto posible”

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

Otra solución similar:

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

Sí, sé que no obtuve el formato de cadena perfecto.

 import datetime from datetime now = datetime.now() print "%0.2d:%0.2d:%0.2d" % (now.hour, now.minute, now.second) 

Puedes hacer lo mismo con el día y el mes, etc.

time.second ayuda mucho a poner eso en la parte superior de tu python.

Lamento abrir un hilo viejo, pero estoy publicando por si acaso ayuda a alguien. Esta parece ser la forma más fácil de hacer esto en 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 necesita los valores como un número, cámbielos como int, por ejemplo

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

Si desea que datetime.now() preciso hasta el minuto, puede usar

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

similarmente por hora será

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

Es una especie de pirateo, si alguien tiene una solución mejor, soy todo oídos.