time delta Berechnung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
osd11
User
Beiträge: 6
Registriert: Dienstag 6. Januar 2015, 15:12

Hallo,

ich möchte gern ein timedelta, welche von einigen sekunden bis viele Tage reichen kann in Sekunden umrechnen.
Folgendes habe ich bisher gemacht:

Code: Alles auswählen

import datetime
    if not os.path.isfile(statefile):
        return False

    # Calculate the delta from now - statefile mtime
    now = datetime.datetime.now()
    mtime = datetime.datetime.fromtimestamp(os.path.getmtime(statefile))
    delta = now - mtime

    print delta.seconds
Leider werden so nicht die gesamten Sekunden errechnet, speziell wenn das delta > 24 Stunden ist.
was mache ich falsch?

thx
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo und willkommen im Forum!

Das "delta" hat eine Methode "total_seconds", damit bekommst du die vergangenen Sekunden. Die Sekunden des "seconds"-Attribut geben nur die Sekunden an, welche nicht in Minuten dargestellt werden konnten.
Das Leben ist wie ein Tennisball.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

osd11 hat geschrieben:was mache ich falsch?
Die kompletten Sekunden musst du anhand der days und seconds der timedelta-Instanz selber ausrechnen. Ab Python 3.2 gibt es das mit timedelta.total_seconds() auch schon eingebaut.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

/me hat geschrieben:Ab Python 3.2 gibt es das mit timedelta.total_seconds() auch schon eingebaut.
Das gibt es auch als Backport ab 2.7.
Das Leben ist wie ein Tennisball.
osd11
User
Beiträge: 6
Registriert: Dienstag 6. Januar 2015, 15:12

man Ihr seit aber flink :D

Ich habe vergessen die Python Version anzugeben, Debian Wheezy, also 2.7.3
osd11
User
Beiträge: 6
Registriert: Dienstag 6. Januar 2015, 15:12

osd11 hat geschrieben:man Ihr seit aber flink :D

Ich habe vergessen die Python Version anzugeben, Debian Wheezy, also 2.7.3
Und wie rechne ich Tage in Sekunden um?
Hab das bisher so versucht:

Code: Alles auswählen

    hours = delta.days * 24
    minutes = hours * 60
    seconds = minutes * 60
    return delta.seconds + seconds
Geht doch sicherlich eleganter, oder? :)
Zuletzt geändert von osd11 am Dienstag 6. Januar 2015, 16:04, insgesamt 1-mal geändert.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@osd11
Wieviele Sekunden hat eine Minute? Wieviele Minuten hat eine Stunde? Wieviele Stunden hat ein Tag?

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Und dann kommt ein Schalttag dazwischen ;-) Benutze einfach die total_seconds-Methode, dann musst du dich um nichts mehr kümmern.
Das Leben ist wie ein Tennisball.
osd11
User
Beiträge: 6
Registriert: Dienstag 6. Januar 2015, 15:12

Bin leider an Python 2.7 gebunden...
Will auf den Maschinen auch nicht extra ein Backport installieren.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Du musst nichts extra installieren, die Methode ist in jedem Python ab 2.7 enthalten. Das ist ein Backport für das Modul von 3.2 auf 2.7, das hat nichts mit der Paketverwaltung deines Betriebssystems zu tun.
Das Leben ist wie ein Tennisball.
osd11
User
Beiträge: 6
Registriert: Dienstag 6. Januar 2015, 15:12

ok, aber folgende Fehlermeldung:
<built-in method total_seconds of datetime.timedelta object at 0xb74f40b0>
Beim Aufruf von

Code: Alles auswählen

delta.total_seconds
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@osd11: das ist keine Fehlermeldung, sondern die Ausgabe, wenn Du eine Methode ausgibst, anstatt sie aufzurufen und das Ergebnis auszugeben.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@osd11
Das ist keine Fehlermeldung, sondern die sichtbare (druckbare) Repräsentation der ``total_seconds`` Methode. Du musst eine Methode natürlich aufrufen, nicht nur "anschauen"...

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
osd11
User
Beiträge: 6
Registriert: Dienstag 6. Januar 2015, 15:12

thx für die vielen Hinweise!!!

Code: Alles auswählen

int(delta.total_seconds())
Das wars ;-)
Antworten