2009-02-01 3 views
14

Ich versuche, einige clevere Daten zu haben, seit ein Beitrag auf meiner Website gemacht wurde ("Sekunden seit, Stunden seit, Wochen seit, etc ..") und ich verwende datetime.timedelta Unterschied zwischen utcnow und utc datiert gespeichert in der Datenbank für einen Beitrag.Python's Timedelta: Kann ich nicht in jede Zeiteinheit kommen, die ich will den Wert der gesamten Differenz?

Sieht so aus, als müsste ich nach den Dokumenten das Attribut days UND das Attribut seconds verwenden, um die ausgefallenen Strings zu erhalten, die ich möchte.

Kann ich nicht einfach in jede Zeiteinheit kommen, die ich will den Wert der gesamten Differenz? Fehle ich etwas?

Es wäre perfekt, wenn ich nur den ganzen Unterschied in Sekunden bekommen könnte.

Antwort

21

Es scheint, dass Python 2.7 hat eine total_seconds() Methode eingeführt, die Sie suchen, glaube ich!

15

Sie können den Unterschied in Sekunden berechnen.

total_seconds = delta.days * 86400 + delta.seconds 

Nein, Sie sind nicht "etwas fehlt". Es liefert keine Deltas in Sekunden.

+0

Das ist, was ich vorhabe zu tun, aber ich wollte diesen Klud in meinem Code einfach nicht, wenn es etwas gab, von dem ich nichts wusste. Vielen Dank. –

+4

Wünschte, sie hätten .total_seconds, .total_minutes, etc etc on timedeltas ... –

+5

Dieser Ansatz, wie 'total_seconds()' in Python 2.7, wird ein falsches Ergebnis zurückgeben, wenn die Tage keine 24 Stunden haben (zB weil Änderungen der Sommerzeit). – Bruno

5

Es wäre perfekt, wenn ich nur den ganzen Unterschied in Sekunden bekommen könnte.

Dann kann plain-old-unix-timestamp, wie vom 'time'-Modul zur Verfügung gestellt, eher nach Ihrem Geschmack sein.

Ich persönlich muss noch von vielen Dingen, die in "datetime" sind, überzeugt werden.

+0

+1 für das Vorschlagen einer Lösung, die nicht davon ausgeht, dass alle Tage 24 Stunden haben. – Bruno

5

Wie bobince sagte: Sie Zeitstempel verwenden könnte, wie folgt aus:

# assuming ts1 and ts2 are the two datetime objects 
from time import mktime 
mktime(ts1.timetuple()) - mktime(ts2.timetuple()) 

Obwohl ich würde denken, dies ist noch hässlicher als nur die Sekunden vom timedelta Objekt Berechnung ...

+3

Sie können die Dinge weiter komplizieren: 'reduzieren (float .__ sub__, (mktime (d.utctimetuple()) für d in (ts1, ts2)))' – jfs

+0

@ J.F.Sebastian: aber warum? – Claudiu

+0

Was passiert, wenn ts1 in einer Zeitzone und ts2 in einer anderen liegt? Oder sie sind in der gleichen Zeitzone, aber eine ist in der Sommerzeit und die andere nicht? –

Verwandte Themen