Datum und Zeit Berechnung

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
doclektor
User
Beiträge: 10
Registriert: Mittwoch 28. Oktober 2015, 04:37

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
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

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.
bfm
User
Beiträge: 88
Registriert: Donnerstag 14. März 2013, 09:42

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
Benutzeravatar
DeaD_EyE
User
Beiträge: 1020
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

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.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten