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

Necesito obtener una cadena como esa: '16:11.34'.¿Cómo obtener minutos, segundos y milisegundos desde datetime.now() en python?

Debe ser lo más compacto posible.

¿O debería usar time()? ¿Cómo lo obtengo?

+0

¿Quiere decir que quiere que se trunque como '16: 11.34', o alguna otra cosa? –

+0

Sí, trancate o foramt o análisis. No lo sé. – Prostak

+1

@Marcin, no he intentado nada porque no sé qué probar. – Prostak

Respuesta

21

¿Qué hay de:

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

no estoy seguro de lo que quiere decir con "sólo 2 milisegundos dígitos", pero esto debe ser conservado a 2 decimales. Puede haber una manera más elegante manipulando la cadena de formato strftime para reducir la precisión también. No estoy del todo seguro.

EDITAR

Si el modificador %f no funciona para usted, 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, estoy suponiendo que lo que desea es truncar la precisión.

+0

'>>> datetime.now(). Strftime ('% M:% S.% f ') [: - 4]' Resultado: '' Algo no es correcto. – Prostak

+0

'[: -4]' significa "comenzar al principio y excluir los últimos 4 caracteres". Por alguna razón, '% f' no funciona aquí y mi resultado final es' 36: 31.f' truncado a '36:'. @Prostak también puede estar obteniendo un resultado truncado ... – Izkata

+2

¿Qué es incorrecto? ¿Surge un error? Creo que el modificador% f se agregó en Python 2.6 (aunque no estoy seguro), ¿qué versión de python estás usando? – mgilson

1

Otra solución similar:

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

sí, ya sé que no sale el formato de cadenas perfecto.

+0

¿qué ocurre con el método 'strftime()' ... No puedo entender el parámetro para milisegundos 'datetime.now(). Strftime ('% M:% S. ??')'. ¿tal vez tu sepas? – Prostak

+0

Usaría '% d' en lugar de'% s' porque está tratando con valores enteros (** d ** igits). – NuclearPeon

2

Esta solución es muy similar a la proporcionada por @ gdw2, sólo que el formato de cadenas se realiza correctamente para que coincida con lo que usted 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' 
+0

qué ocurre con el método 'strftime()' .... No puedo entender el parámetro para milisegundos 'datetime.now(). Strftime ('% M:% S. ??')'. ¿tal vez tu sepas? – Prostak

+0

Si TIENE que usar strftime, entonces la solución de @mgilson parece lo que necesita hacer, es decir: datetime.datetime.now(). Strftime ("% M:% S.% f") [: - 4] para obtener el formato exacto que solicitó '>>> import datetime >>> datetime.datetime.now(). Strftime ("% M:% S.% f ") [: - 4] ' 14: 07.90'' – Pythomania

+0

% f no parece funcionar en 2.4 – Prostak

0

time.second ayuda mucho poner eso en la parte superior de su pitón.

0

Lamento abrir un hilo antiguo pero estoy publicando solo en caso de que ayude 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 sólo les echaron como un int por ejemplo

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

now = datetime.now() 

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

Puede hacer lo lo mismo con el día & mes, etc.

Cuestiones relacionadas