Tengo un timedelta. Quiero los días, horas y minutos de eso, ya sea como una tupla o un diccionario ... No estoy preocupado.
Debo haber hecho esto una docena de veces en una docena de idiomas a lo largo de los años, pero Python generalmente tiene una respuesta simple a todo, así que pensé en preguntar aquí antes de revelar algunas matemáticas nauseabundamente simples (pero detalladas).
El Sr. Fooz plantea un buen punto.
Estoy tratando con "listados" (un poco como los listados de eBay) donde cada uno tiene una duración. Estoy tratando de encontrar el tiempo que queda haciendowhen_added + duration - now
¿Tengo razón al decir que eso no representaría el horario de verano? Si no, ¿cuál es la forma más simple de sumar / restar una hora?
timedelta
objeto "datetime.timedelta (segundos = 1177)" : simplemente use str ()Respuestas:
Si tiene un
datetime.timedelta
valortd
,td.days
ya le da los "días" que desea.timedelta
los valores mantienen la fracción del día como segundos (no directamente horas o minutos), por lo que, de hecho, tendrá que realizar "matemáticas nauseabundamente simples", por ejemplo:fuente
td
es negativo,-1 // 3600
es-1
.//
se usa en lugar de/
obtener un número entero, no un flotante.//
es un operador de división de piso: "división que resulta en un número entero ajustado a la izquierda en la línea numérica", vea aquí .jcrs
fuera de punta,-1//3600
está-1
, ¿por qué no usarint(td.seconds/3600)
en lugar de convertir-1
segundos en0
horas en lugar de1
hacia atrás por hora?days, hours, minutes = x.days, x.seconds // 3600, x.seconds %3600//60
y luegoseconds = x.seconds - hours*3600 - minutes*60
Esto es un poco más compacto, obtienes las horas, minutos y segundos en dos líneas.
fuente
td.days
no es cero. Es necesariohours += td.days*24
. Si desea tener en cuenta fracciones de segundo (OP no);seconds += td.microseconds / 1e6
puede ser usado.En cuanto a DST, creo que lo mejor es convertir ambos
datetime
objetos en segundos. De esta manera, el sistema calcula el horario de verano por usted.fuente
mktime()
puede fallar si la zona horaria local puede tener un desplazamiento utc diferente en diferentes momentos (muchos lo hacen); podría usar elpytz
módulo para obtener acceso a la base de datos tz de una manera deteminista portátil. Además, la hora local puede ser ambigua (50% de posibilidades de error): necesita información adicional para desambiguar, por ejemplo, a menudo (no siempre) las fechas en un archivo de registro son monótonas . Consulte ¿Cómo puedo restar un día de una fecha de Python? eso puede tener que lidiar con problemas similares.No entiendo
Qué tal esto
Tienes minutos y segundos de un minuto como flotador.
fuente
Usé lo siguiente:
fuente
los timedeltas tienen un atributo
days
yseconds
... puedes convertirlos tú mismo con facilidad.fuente