Seite 1 von 1

time delta Berechnung

Verfasst: Dienstag 6. Januar 2015, 15:34
von osd11
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

Re: time delta Berechnung

Verfasst: Dienstag 6. Januar 2015, 15:37
von EyDu
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.

Re: time delta Berechnung

Verfasst: Dienstag 6. Januar 2015, 15:41
von /me
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.

Re: time delta Berechnung

Verfasst: Dienstag 6. Januar 2015, 15:46
von EyDu
/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.

Re: time delta Berechnung

Verfasst: Dienstag 6. Januar 2015, 15:46
von osd11
man Ihr seit aber flink :D

Ich habe vergessen die Python Version anzugeben, Debian Wheezy, also 2.7.3

Re: time delta Berechnung

Verfasst: Dienstag 6. Januar 2015, 15:52
von osd11
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? :)

Re: time delta Berechnung

Verfasst: Dienstag 6. Januar 2015, 16:03
von mutetella
@osd11
Wieviele Sekunden hat eine Minute? Wieviele Minuten hat eine Stunde? Wieviele Stunden hat ein Tag?

mutetella

Re: time delta Berechnung

Verfasst: Dienstag 6. Januar 2015, 16:06
von EyDu
Und dann kommt ein Schalttag dazwischen ;-) Benutze einfach die total_seconds-Methode, dann musst du dich um nichts mehr kümmern.

Re: time delta Berechnung

Verfasst: Dienstag 6. Januar 2015, 16:10
von osd11
Bin leider an Python 2.7 gebunden...
Will auf den Maschinen auch nicht extra ein Backport installieren.

Re: time delta Berechnung

Verfasst: Dienstag 6. Januar 2015, 16:14
von EyDu
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.

Re: time delta Berechnung

Verfasst: Dienstag 6. Januar 2015, 16:17
von osd11
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

Re: time delta Berechnung

Verfasst: Dienstag 6. Januar 2015, 16:21
von Sirius3
@osd11: das ist keine Fehlermeldung, sondern die Ausgabe, wenn Du eine Methode ausgibst, anstatt sie aufzurufen und das Ergebnis auszugeben.

Re: time delta Berechnung

Verfasst: Dienstag 6. Januar 2015, 16:25
von mutetella
@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

Re: time delta Berechnung

Verfasst: Dienstag 6. Januar 2015, 16:31
von osd11
thx für die vielen Hinweise!!!

Code: Alles auswählen

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