Convertir un flotador a formato hh: mm

Quiero imprimir un valor flotante que obtuve después de hacer algunos cálculos matemáticos como una cadena en el formato hh: mm. Actualmente tengo: (El tiempo en este caso es igual a un flotador como 9.888888888888886, o 09:50 (como lo quiero))

time = str(time) time = time.split(".") time[1] = float(time[1]) time[1] *= 0.6 time[1] = str(time[1]) 

y cuando lo imprimo lo uso

  str(time[0]) + ":" + time[1][:2] 

¿Alguna forma de lograr este efecto consistentemente? Con entradas más avanzadas, mi código anterior no funciona correctamente y genera el tiempo incorrecto.

Como alternativa a usar datetime , puede usar un formato simple con un poco de matemática, por ejemplo:

 result = '{0:02.0f}:{1:02.0f}'.format(*divmod(time * 60, 60)) 

Utilizando datetime.timedelta :

 >>> import datetime >>> datetime.timedelta(hours=9.888888888888886) datetime.timedelta(0, 35600) >>> str(datetime.timedelta(hours=9.888888888888886)) '9:53:20' >>> str(datetime.timedelta(hours=9.888888888888886)).rsplit(':', 1)[0] '9:53' 

 >>> datetime.datetime.combine(datetime.date.today(), datetime.time()) + \ ... datetime.timedelta(hours=9.888888888888886) datetime.datetime(2014, 12, 16, 9, 53, 20) >>> _.strftime('%H:%M') '09:53' 

Usando divmod obtienes el rest y el cociente de una división.

 minutes = 9.888888888888886*60 hours, minutes = divmod(minutes, 60) print "%02d:%02d"%(hours,minutes) 

Salida:

 09:53 

Si quieres los segundos también:

 seconds = 9.888888888888886*60*60 minutes, seconds = divmod(seconds, 60) hours, minutes = divmod(minutes, 60) print "%02d:%02d:%02d"%(hours,minutes,seconds) 

Suponiendo que desea convertir 9.888888888888886 en 09:53 , debido a que el primero era horas de punto flotante, y no quiere preocuparse por días, sin una biblioteca que simplemente podría hacer:

 fhours = 9.888888888888886 ihours = int(ihours) "%02d:%02d" % (ihours,(fhours-ihours)*60) 

Con sólo el módulo de matemáticas, intente

 import math "%02d:%02d" % (fhours,math.modf(fhours)[0]*60) 

Podría pensar que el uso del módulo datetime ayudaría, pero en realidad es un poco incómodo. Puede obtener un objeto timedelta pasando sus horas fraccionarias:

  import datetime td = datetime.timedelta(hours=9.888888888888886) 

Pero poner eso en un objeto de tiempo o en un objeto de fecha y hora para dar formato es un poco difícil, terminas teniendo que hacer algo como

  import datetime td = datetime.timedelta(hours=9.888888888888886) (datetime.datetime(2000,1,1)+td).strftime("%H:%M") 

(Eso usa una fecha elegida al azar para obtener el tiempo delta en una fecha y hora de uso)