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?
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.