2011-12-01 12 views
21

Tengo un Python datetime, d, y quiero obtener el número de horas desde la medianoche como un número de coma flotante. El mejor que he llegado con es:¿Cómo puedo obtener horas de una fecha de Python?

h = ((((d.hour * 60) + d.minute) * 60) + d.second)/(60.0 * 60) 

Lo que posibilita un 4.5 para las 4:30 am, 18.75 por 18:45, etc. ¿Hay una mejor manera?

+0

también hay 'd.microsecond' – jfs

Respuesta

31
h = d.hour + d.minute/60. + d.second/3600. 

tiene menos soportes ...

+0

Esto dice lo que quiero decir con mucha más claridad. Me gusta. –

+0

¡Me sorprende que los objetos datetime no tengan un método como ".get_hours" que haga esto !! – Tommy

+1

@ChrisNelson: cuidado, la aritmética de coma flotante difiere de la matemática habitual, es decir, incluso si las fórmulas parecen equivalentes; pueden producir resultados diferentes (si es el caso aquí o si es importante incluso si depende de su aplicación), por ejemplo, [problemas de punto flotante en el método '.total_seconds()'] (http://bugs.python.org/issue8644) – jfs

5
h = (d - d.replace(hour=0,minute=0,second=0)).seconds/3600. 

... tiene menos división y/o multiplicación

+0

¿Qué hay de microsegundos? – ovgolovin

+0

@eumiro: ¡No, solo me refería al código mecanografiado ya que había perdido la frugalidad de los soportes! – MattH

+0

@ovgolovin: El OP no está contando microsegundos, por lo que si no está en el método de reemplazo, se restarán del resultado. En realidad, microsegundos se almacenan por separado en el objeto timedelta, por lo que simplemente no los considero como lo hizo el OP. – MattH

Cuestiones relacionadas