J'ai un timedelta. Je veux les jours, les heures et les minutes de cela - soit comme un tuple ou un dictionnaire ... Je ne suis pas embêté.
J'ai dû le faire une douzaine de fois dans une douzaine de langues au fil des ans, mais Python a généralement une réponse simple à tout, alors j'ai pensé que je demanderais ici avant d'éclater des mathématiques d'une simplicité nauséabonde (mais verbeuse).
M. Fooz soulève un bon point.
J'ai affaire à des "listes" (un peu comme les listes ebay) où chacune a une durée. J'essaye de trouver le temps qui reste en faisantwhen_added + duration - now
Ai-je raison de dire que cela ne rendrait pas compte de l'heure d'été? Sinon, quelle est la manière la plus simple d'ajouter / de soustraire une heure?
timedelta
objet "datetime.timedelta (seconds = 1177)" : utilisezRéponses:
Si vous avez une
datetime.timedelta
valeurtd
,td.days
vous donne déjà les "jours" que vous souhaitez.timedelta
les valeurs restent fraction de jour sous forme de secondes (pas directement des heures ou des minutes), vous devrez donc effectuer des "mathématiques d'une simplicité nauséabonde", par exemple:la source
td
est négatif, l'-1 // 3600
est-1
.//
est utilisé à la place de/
pour obtenir un entier, pas un flottant.//
est un opérateur de division d'étage: "division qui se traduit par un nombre entier ajusté à gauche dans la droite numérique", voir ici .jcrs
indiqué,-1//3600
est-1
, alors pourquoi ne pas utiliser à laint(td.seconds/3600)
place pour transformer la-1
seconde en0
heures plutôt qu'en1
heure en arrière?days, hours, minutes = x.days, x.seconds // 3600, x.seconds %3600//60
puisseconds = x.seconds - hours*3600 - minutes*60
C'est un peu plus compact, vous obtenez les heures, les minutes et les secondes sur deux lignes.
la source
td.days
est différent de zéro. Vous en avez besoinhours += td.days*24
. Si vous voulez prendre en compte des fractions de seconde (OP ne le fait pas);seconds += td.microseconds / 1e6
peut être utilisé.Quant à l'heure d'été, je pense que la meilleure chose est de convertir les deux
datetime
objets en secondes. De cette façon, le système calcule l'heure d'été pour vous.la source
mktime()
peut échouer si le fuseau horaire local peut avoir un décalage utc différent à différents moments (beaucoup le font) - vous pouvez utiliser lepytz
module pour accéder à la base de données tz de manière détéministe portable. En outre, l'heure locale peut être ambiguë (50% de chances d'une erreur) - vous avez besoin d'informations supplémentaires pour lever l'ambiguïté, par exemple, souvent (pas toujours) les dates dans un fichier journal sont monotones . Voir Comment puis-je soustraire un jour d'une date python? qui peuvent avoir à faire face à des problèmes similaires.Je ne comprends pas
que dis-tu de ça
Vous obtenez des minutes et des secondes d'une minute comme un flotteur.
la source
J'ai utilisé ce qui suit:
la source
les timedeltas ont un attribut
days
etseconds
.. vous pouvez les convertir vous-même facilement.la source