Ich habe ein Zeitdelta. Ich möchte die Tage, Stunden und Minuten davon - entweder als Tupel oder als Wörterbuch ... Ich bin nicht aufgeregt.
Ich muss dies im Laufe der Jahre ein Dutzend Mal in einem Dutzend Sprachen getan haben, aber Python hat normalerweise eine einfache Antwort auf alles, also dachte ich, ich würde hier fragen, bevor ich eine widerlich einfache (und dennoch ausführliche) Mathematik herausbringe.
Herr Fooz spricht einen guten Punkt an.
Ich habe es mit "Listings" zu tun (ein bisschen wie bei eBay-Listings), bei denen jeder eine Dauer hat. Ich versuche, die verbleibende Zeit zu findenwhen_added + duration - now
Habe ich Recht, wenn ich sage, dass die Sommerzeit nicht berücksichtigt wird? Wenn nicht, wie lässt sich eine Stunde am einfachsten addieren / subtrahieren?
timedelta
Objekt "datetime.timedelta (Sekunden = 1177)" : Verwenden SieAntworten:
Wenn Sie einen
datetime.timedelta
Wert habentd
, erhalten Sietd.days
bereits die gewünschten "Tage".timedelta
Werte halten den Bruchteil des Tages als Sekunden (nicht direkt Stunden oder Minuten), sodass Sie in der Tat "widerlich einfache Mathematik" durchführen müssen, z.quelle
td
negativ ist,-1 // 3600
ist-1
.//
wird verwendet/
, um eine Ganzzahl zu erhalten, keinen Gleitkommawert.//
ist ein Floor-Division-Operator: "Division, die zu einer ganzen Zahl führt, die in der Zahlenreihe links angepasst ist", siehe hier .jcrs
erwähnt,-1//3600
ist-1
, warum also nicht verwenden ,int(td.seconds/3600)
anstatt zu drehen-1
in der zweiten0
Stunden anstatter1
Stunde nach hinten?days, hours, minutes = x.days, x.seconds // 3600, x.seconds %3600//60
und dannseconds = x.seconds - hours*3600 - minutes*60
Dies ist etwas kompakter, Sie erhalten die Stunden, Minuten und Sekunden in zwei Zeilen.
quelle
td.days
es nicht Null ist. Du brauchsthours += td.days*24
. Wenn Sie Sekundenbruchteile berücksichtigen möchten (OP nicht);seconds += td.microseconds / 1e6
könnte verwendet werden.Was die Sommerzeit betrifft, denke ich, ist es am besten, beide
datetime
Objekte in Sekunden umzuwandeln . Auf diese Weise berechnet das System die Sommerzeit für Sie.quelle
mktime()
kann fehlschlagen, wenn die lokale Zeitzone zu unterschiedlichen Zeiten einen anderen utc-Offset aufweist (viele tun dies) - Sie können daspytz
Modul verwenden, um auf tragbare deteministische Weise auf die tz-Datenbank zuzugreifen. Außerdem kann die Ortszeit nicht eindeutig sein (50% Fehlerwahrscheinlichkeit) - Sie benötigen einige zusätzliche Informationen, um eindeutig zu sein, z. B. sind häufig (nicht immer) Daten in einer Protokolldatei eintönig . Siehe Wie kann ich einen Tag von einem Python-Datum abziehen? das muss sich möglicherweise mit ähnlichen Problemen befassen.Ich verstehe nicht
Wie wäre es damit
Sie erhalten Minuten und Sekunden einer Minute als Schwimmer.
quelle
Ich habe folgendes verwendet:
quelle
timedeltas haben ein
days
undseconds
Attribut .. Sie können sie mit Leichtigkeit selbst konvertieren.quelle