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?

timedeltaobjeto "datetime.timedelta (segundos = 1177)" : simplemente use str ()Respuestas:
Si tiene un
datetime.timedeltavalortd,td.daysya le da los "días" que desea.timedeltalos 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
tdes negativo,-1 // 3600es-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í .jcrsfuera de punta,-1//3600está-1, ¿por qué no usarint(td.seconds/3600)en lugar de convertir-1segundos en0horas en lugar de1hacia atrás por hora?days, hours, minutes = x.days, x.seconds // 3600, x.seconds %3600//60y luegoseconds = x.seconds - hours*3600 - minutes*60Esto es un poco más compacto, obtienes las horas, minutos y segundos en dos líneas.
fuente
td.daysno es cero. Es necesariohours += td.days*24. Si desea tener en cuenta fracciones de segundo (OP no);seconds += td.microseconds / 1e6puede ser usado.En cuanto a DST, creo que lo mejor es convertir ambos
datetimeobjetos 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 elpytzmó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
daysyseconds... puedes convertirlos tú mismo con facilidad.fuente