Seite 1 von 1

datetime und timedelta

Verfasst: Dienstag 3. Februar 2009, 19:21
von psyalex
Hi, ich hab mal ne Frage zum datetime Modul:

Wie kann ich denn eine datetime Objekt (z.B. datetime.now().time()) in eine timedelta Objekt umwandel mit dem ich dann z.B. Differenzen bilden kann? Da muss es doch einen einfacheren Weg geben als das datetime Objekt in Stunden, Minuten und Sekunden umzuwandeln, oder?

Vielen Dank schon mal,
Alex.

Verfasst: Dienstag 3. Februar 2009, 19:28
von sea-live
für timedelta sollte doch clock() ausreichen oder wilste mit dem datum rechnen

wenn ja welche time differenzes min solens denn sein !

Code: Alles auswählen

import time

# Zwei Zeitangaben erzeugen
millenium = 2000, 1, 1, 0, 0, 0, 0, 0, 0
damals = time.mktime(millenium)
print "Zeit 1:", time.localtime(damals)

jetzt = 2003, 2, 4, 0, 0, 0, 0, 0, 0
heute = time.mktime(jetzt)
print "Zeit 2:", time.localtime(heute)

# Differenz berechnen
print "Differenz:"
print

diff_sek = heute - damals
print diff_sek, "Sekunden"

diff_min = diff_sek/60
print diff_min, "Minuten"

diff_std = diff_min/60
print diff_std, "Stunden"

diff_tag = diff_std/24
print diff_tag, "Tage"

Verfasst: Dienstag 3. Februar 2009, 19:38
von cofi
datetime.datetime (und damit auch datetime.date und datetime.time) unterstützen Rechenoperationen, da brauchst du also nichts rumrechnen.

Code: Alles auswählen

In [1]: import datetime     

In [2]: then = datetime.datetime.now()

In [3]: now = datetime.datetime.now()

In [4]: now - then
Out[4]: datetime.timedelta(0, 15, 689915)

Verfasst: Dienstag 3. Februar 2009, 20:07
von psyalex
ich hatte das hier probiert, was aber nicht geht.

Code: Alles auswählen

then=datetime.datetime.now().time()
now=datetime.datetime.now().time()
diff=now-then
Im Beispiel geht das natürlich auch gut ohne .time() ich hatte es aber verwendet weil ich für den neueren der beiden Timestamps kein Datum habe. Tatsächlich will ich so was machen: 22:00 Uhr - jetzt. Weiß jemdand wie man die folgenden beiden Elemente zu einem Objekt zusammen bekommt?

Code: Alles auswählen

datetime.datetime.now().date()
datetime.time(hour=22)
Das würde mein Problem auch lösen.

time.clock() ist bei mir (Ubuntu) = 0.0, was meiner Meinung nach nicht dem entspricht was in der Python Dokumentation zu clock() steht.

Verfasst: Dienstag 3. Februar 2009, 20:31
von hendrikS
So könnte es gehen:

Code: Alles auswählen

import datetime
a = datetime.datetime.now()
b = datetime.datetime(2009,02,03,22)
print b-a
Das Datum im datetime Object kannst Du Dir wenn nötig ueber today().year usw. holen. Vielleicht gibt es auch was eleganteres.

Verfasst: Mittwoch 4. Februar 2009, 09:36
von BlackJack
@psyalex: Zum Kombinieren von Datum und Zeit gibt's eine (statische) `combine()`-Methode:

Code: Alles auswählen

In [185]: now = datetime.datetime.now()

In [186]: a = datetime.datetime.combine(now.date(), datetime.time(hour=22))

In [187]: a
Out[187]: datetime.datetime(2009, 2, 4, 22, 0)
Die `time.clock()`-Funktion entspricht der Dokumentation, welche an sich schon sehr schwammig formuliert ist:

Code: Alles auswählen

In [189]: time.clock?
Type:           builtin_function_or_method
Base Class:     <type 'builtin_function_or_method'>
String Form:    <built-in function clock>
Namespace:      Interactive
Docstring:
    clock() -> floating point number

    Return the CPU time or real time since the start of the process or since
    the first call to clock().  This has as much precision as the system
    records.
CPU-Zeit oder die "echte" Zeit ist ja schon ein riesiger Unterschied und ob nun vom Anfang des Prozesses oder ab dem ersten Aufruf der Funktion gezählt wird, ebenfalls.

Wenn Du 0.0 beim ersten Aufruf bekommst, kann man daran alleine noch nicht einmal sagen, welche Zeit das nun ist. Unter Linux ist's die CPU-Zeit seit Prozessstart.

Verfasst: Donnerstag 5. Februar 2009, 09:16
von psyalex
@BlackJack: Vielen Dank! Die combine Methode ist genau das was ich brauche.