Seite 1 von 1

Datum und Zeit Berechnung

Verfasst: Dienstag 29. Mai 2018, 09:39
von doclektor
Hallo an alle.

Ich bringe mir Python selber bei und stoße aber immer wieder auf Probleme.
Ich möchte euch Fragen ob ihr mir mal auf die Sprünge helfen könnt.
Ich weiß wie ich das Datum und die Uhrzeit einlese.
Ich möchte nun erreichen das, dass aktuelle Datum wenn ich ein Programm starte
gespeichert wird und bei jedem nächten Start des Programms, ausgerchnet wird
wieviel Tage, Stunden, Minuten und Sekunden vergangen sind.

Könnt ihr mir bitte helfen.
Vielen dank schon mal im voraus

Re: Datum und Zeit Berechnung

Verfasst: Dienstag 29. Mai 2018, 09:51
von kbr
Wenn Dir Datum und Uhrzeit bekannt sind, dann speicherst Du diese. Beispielsweise in einer Datei. Wenn Du Dein Programm das nächste mal startest, dann suchst Du diese Datei und, sofern vorhanden, liest deren Inhalt und vergleichst diesen mit den nun aktuellen Zeit.

Re: Datum und Zeit Berechnung

Verfasst: Dienstag 29. Mai 2018, 19:58
von bfm
Hallo,

und um das Rad nicht neu erfinden zu müssen, gibt es in Python bereits einen Datentyp namens datetime. Anfangs vielleicht nicht ganz einfach zu verstehen, aber wenn man mal den Durchblick hat, sehr nützlich.

mfg

Re: Datum und Zeit Berechnung

Verfasst: Mittwoch 30. Mai 2018, 15:11
von DeaD_EyE

Code: Alles auswählen

import datetime

now = datetime.datetime.now() # naive Datetime ohne Zeitzone
utc_now = datetime.datetime.utcnow() # Datetime mit Zeitzone UTC

now_iso_str = now.isoformat()
utc_now_iso_str = utc_now.isoformat()
Leider gibt es keine Funktion, die aus dem isoformat (ISO 8601) wieder ein Datetimeobjekt macht. Das musst du dann manuell parsen oder du installierst einfach das Modul iso8601.
Ich persönlich nutze dieses Format, da es portabel ist.

Andererseits könntest du auch einfach nur den Timestamp abspeichern. Das geht sehr einfach:

Code: Alles auswählen

now_timestamp = datetime.datetime.now().timestamp()
now_timestamp_str = str(now_timestamp)

# um daraus wieder ein Objekt zu machen:
timestamp_aus_datei = '1527688709.860089'
timestamp = float(timestamp_aus_datei)
last_time = datetime.datetime.fromtimestamp(timestamp)
Den Rest wirst du schon hinbekommen. Am besten auch mal in die Doku von datetime reinsehen.
Wenn du die Datei schreibst, musst du beachten, dass du einen float zuvor in einen string umwandeln musst, sofern du den Timestamp verwendest.

Die Berechnung von delta_time ist auch nicht kompliziert. Eine einfache Subtraktion:

Code: Alles auswählen

last = datetime.datetime.now()
time.sleep(10)
now = datetime.datetime.now()
timedelta = now - last
Durch die Substraktion wird ein neues Objekt erstellt (timedelta), dass verschiedene Attribute hat.

Code: Alles auswählen

print('\n'.join(entry for entry in  dir(timedelta) if not entry.startswith('_')))

Code: Alles auswählen

days
max
microseconds
min
resolution
seconds
total_seconds
Wenn du mit dem Timestamp rechnest, brauchst du das erst gar nicht in ein Datetimeobjekt umzuwandeln. Die Berechnung für tage, stunden, minuten müsstest du dann selbst durchführen.

Code: Alles auswählen

seconds = 500000
minutes, seconds = divmod(seconds, 60)
hours, minutes = divmod(minutes, 60)
days, hours = divmod(hours, 24)
Einfach mal nachschauen was divmod macht. Ich bin jetzt zu faul das auch noch zu erklären.