datetime und timedelta

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
psyalex
User
Beiträge: 26
Registriert: Samstag 17. November 2007, 22:10
Wohnort: München

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.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

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"
Benutzeravatar
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)
psyalex
User
Beiträge: 26
Registriert: Samstag 17. November 2007, 22:10
Wohnort: München

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.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

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.
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.
psyalex
User
Beiträge: 26
Registriert: Samstag 17. November 2007, 22:10
Wohnort: München

@BlackJack: Vielen Dank! Die combine Methode ist genau das was ich brauche.
Antworten