Sinnvoller Vorgang beim Rechnen mit Uhrzeiten

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
Hartmannsgruber
User
Beiträge: 89
Registriert: Mittwoch 15. Januar 2014, 22:30
Wohnort: Bad Kötzting
Kontaktdaten:

Servus,

ich habe mich in letzter Zeit etwas mehr mit dem datetime modul befasst.
Mir stellt sich aber noch eine Frage zur Benutzung in Programmen.

Nehme man an man hat ein Programm, dass täglich zu verschiedenen Zeiten
die Uhrzeit protokolliert, die Differenz zwischen den einzelnen Zeitmessungen
berechnet und zu den Differenzen noch irgendwelche Zeiträume hinzurechnen muss.

Wie würde man aufgrund der vielen Verwendungszwecke diese "Zeiten" intern im
Programm verwenden.
Ist es bei solchen Vorgängen sinnvoll immer wieder datetime.date, oder datetime.time
Objekte zu erstellen, oder diese intern mit timedeltas zu belegen und dann erst bei der
Ausgabe in datetime.date/time objekte umzuwandeln?

Die Frage ist aufgetaucht, da mir bei Versuchen mit IDLE aufgefallen ist, dass es doch
etwas umständlich ist immer zwischen den einzelnen Zeiten hin und her zu konvertieren
um eine Addition, oder Subtraktion durch zu führen.

Liebe Grüße
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann mach es doch so, wie es in deinem Fall am einfachsten ist.
Hartmannsgruber
User
Beiträge: 89
Registriert: Mittwoch 15. Januar 2014, 22:30
Wohnort: Bad Kötzting
Kontaktdaten:

Ich dachte da mehr an etwas wie ein ungeschriebenes Gesetz
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du bleibst zu vage um da konkrete Hinweise geben zu können.
Benutzeravatar
__blackjack__
User
Beiträge: 13115
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Hartmannsgruber: Ich verstehe nicht wo da immer hin und her konvertiert werden soll/muss‽ Wenn man die aktuelle Uhrzeit erstellt um sie zu protokollieren, bekommt man ein `datetime`-Objekt. Und damit rechnet man dann auch, denn das geht mit Zeichenketten ja nicht. Die braucht man nur für die Ausgabe.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Hartmannsgruber
User
Beiträge: 89
Registriert: Mittwoch 15. Januar 2014, 22:30
Wohnort: Bad Kötzting
Kontaktdaten:

Vielen Dank für eure Antworten.
Ich habe mir eine Übersicht gebastelt.
Dadurch wird der Umgang mit den einzelnen Zeit und Datumstypen selbsterklärend.

time() + time() = error
time() + date() = error
time() + datetime() = error
time() + timedelta() = error

time() - time() = error
time() - date() = error
time() - datetime() = error
time() - timedelta() = error
---------------------------------
date() + time() = error
date() + date() = error
date() + datetime() = error
date() + timedelta = datetime.date()

date() - time() = error
date() - date() = datetime.timedelta()
date() - datetime = error
date() - timedelta = datetime.date()
--------------------------------
datetime() + time() = error
datetime() + date() = error
datetime() + datetime() = error
datetime() + timedelta() = datetime.datetime()

datetime() - time() = error
datetime() - date() = error
datetime() - datetime() = datetime.timedelta()
datetime() - timedelta() = datetime.datetime()
------------------------------
timedelta() + time() = error
timedelta() + date() = datetime.date()
timedelta() + datetime() = datetime.datetime()
timedelta() + timedelta() = datetime.timedelta()

timedelta() - time() = error
timedelta() - date() = error
timedelta() - datetime() = error
timedelta() - timedelta() = datetime.timedelta()
nezzcarth
User
Beiträge: 1635
Registriert: Samstag 16. April 2011, 12:47

Vielleicht kann man als Randbemerkung dazu noch sagen, dass der Umgang mit Zeit- und Datumsangaben mit den Mitteln der Standardbibliothek auch nicht ganz kritik-frei ist. Auch deswegen gibt es eine größere Anzahl an Drittmodulen, die versuchen, das einheitlicher, strukturierter, etc. zu machen (z. B. arrow, dateutil, pendulum, …). Wenn man eine Anwendung hat, in der recht viel mit Zeit- und Datumsangaben gearbeitet wird, man konvertieren, parsen, vielleicht zwischen Zeitzonen umrechnen muss usw. kann es sich daher lohnen, sich eines der anderen Module anzusehen. Für die meisten Skripte, in denen man nur mal ein Datum braucht, ist es vmtl. aber doch einfacher, mit dem Standardmodulen zu arbeiten und sich von dem leichten Chaos, das da meiner Meinung nach herrscht, nicht abschrecken zu lassen.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1021
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Seit Python 3.9 gibt es das Modul zoneinfo, welches auf die Zeitzonendaten des Betriebssystems zugreifen kann.
Unter Windows muss man noch das first party package tzdata installieren.

Wenn man die Zeitzone weglässt, hat man ein naive datetime object, welches keine Zeitzone und auch keinen offset beinhaltet.
Solange man nicht die Zeitzone hin- und herwechselt, kann man ohne Zeitzone arbeiten.

Probleme gibt es dann erst bei der Normalzeit/Sommerzeit-Umstellung.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten