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.
datetime und timedelta
für timedelta sollte doch clock() ausreichen oder wilste mit dem datum rechnen
wenn ja welche time differenzes min solens denn sein !
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"
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
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)
ich hatte das hier probiert, was aber nicht geht.
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.
Code: Alles auswählen
then=datetime.datetime.now().time()
now=datetime.datetime.now().time()
diff=now-then
Code: Alles auswählen
datetime.datetime.now().date()
datetime.time(hour=22)
time.clock() ist bei mir (Ubuntu) = 0.0, was meiner Meinung nach nicht dem entspricht was in der Python Dokumentation zu clock() steht.
So könnte es gehen:
Das Datum im datetime Object kannst Du Dir wenn nötig ueber today().year usw. holen. Vielleicht gibt es auch was eleganteres.
Code: Alles auswählen
import datetime
a = datetime.datetime.now()
b = datetime.datetime(2009,02,03,22)
print b-a
@psyalex: Zum Kombinieren von Datum und Zeit gibt's eine (statische) `combine()`-Methode:
Die `time.clock()`-Funktion entspricht der Dokumentation, welche an sich schon sehr schwammig formuliert ist:
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.
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)
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.
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.