Hallo liebes Forum,
Ich bräuchte kurz Hilfe für die Realisierung einer Funktion.
Szenario:
Ich habe zwei genaue Zeitpunkte
Datum1 mit Uhrzeit1
Datum2 mit Uhrzeit2
(es ist keine Datetime sondern ein Datum und eine Uhrzeit getrennt)
Nun möchte ich die Differenz der beiden Zeitstempel ausrechnen und zwar in Sekunden. Ich weiß dass man dazu den Unix Zeitstempel verwenden kann, jedoch ist dieser in 32bit Integer und hat daher das "Jahr 2038"-Problem. Ich möchte daher die Funktion so schreiben, dass 64 bit Floats verwendet werden, was angeblich mit time.time() funktioniert. Davor brauche ich aber eine Funktion die ein Datum und eine Uhrzeit nimmt und diese in ein 64bit Float umwandelt damit ich dann die Differenz der beiden Zeitstempel ausrechnen kann.
Ich habe schon recherchiert und viele Funktionen gefunden, jedoch habe ich immer Bedenken dass es eine 32Bit Integer Realisierung ist. Daher die Frage: Gibt es eine Funktion in Python der man ein Datum und eine Uhrzeit getrennt übergeben kann, die dann daraus ein 64bit Float errechnet (ähnlich zum Unix Standard)? Alternativ kann man ja aus der Uhrzeit und dem Datum erstmal ein Datetime erstellen und dann einer Funktion übergeben die daraus dann den 64bit Float errechnet.
Differenz zw. zwei Zeitstempel in 64bit float
Das mit dem Timedelta habe ich völlig übersehen. Danke für den Tipp. Ich mache das jetzt so:
Er scheint auch keine Probleme mit einem Datum über 2038 zu haben. Die Frage ist nur: Ist datetime.now() automatisch Zeitzonen behaftet? Ich verwende den Code nämlich in Django (Web Framework). Soweit ich das verstanden hab ist datetime.now() ohne Zeitzonen und datetime.utcnow() mit Zeitzonen richtig?
Code: Alles auswählen
now = datetime.now()
zeitstempel = datetime(2040,11,19,19,36,0)
diff = zeitstempel-now
print(now)
print(zeitstempel)
print(diff.total_seconds())
Ausgabe:
2017-11-19 19:41:45.920148
2040-11-19 19:36:00
725846054.08
Nein. AFAIK musst du noch das Paket tzinfo installieren. Nur dann bekommst du Zeitzonen. UTC berücksichtigt nur EINE Zeitzone - deine. So das UTC korrekt ist. Aber damit kannst du nicht verschiedene individuelle Zeitzonen verrechnen. Jedenfalls nicht schlüssig. Wobei das eh ein ganzer Sack voll Probleme ist, den man nicht so schnell durchsteigt (und en Detail auch vergisst, so wie ich )
- noisefloor
- User
- Beiträge: 3854
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Also `datetime.datetime.now()` liefert per default die lokale Zeit, `datetime.datetime.utcnow()` die koordinierte / universelle Zeit.
Wie Django mit Zeitzonen umgeht kann man konfigurieren: https://docs.djangoproject.com/en/1.11/ ... timezones/ (Hinweis: Django 1.8 LTS benötigt dazu die manuelle Installation des `pytz` Moduls, bei 1.11 LTS wird es automatisch installiert).
Gruß, noisefloor
Nee, anders rum: "UTC" steht für "Universal Time Coordinated" (auf Deutsch: koordinierte Weltzeit) und ist das, was früher als "Greenwich Mean Time" bekannt war.UTC berücksichtigt nur EINE Zeitzone - deine
Also `datetime.datetime.now()` liefert per default die lokale Zeit, `datetime.datetime.utcnow()` die koordinierte / universelle Zeit.
Wie Django mit Zeitzonen umgeht kann man konfigurieren: https://docs.djangoproject.com/en/1.11/ ... timezones/ (Hinweis: Django 1.8 LTS benötigt dazu die manuelle Installation des `pytz` Moduls, bei 1.11 LTS wird es automatisch installiert).
Gruß, noisefloor
@noisefloor: das ist mir schon klar. Aber natürlich muss es dafür die Zeitzone kennen, in der du dich befindest:
Sonst kann die CET Differenz ja nicht bestimmt werden. Und das habe ich gemeint.
Code: Alles auswählen
>>> dt.datetime.now()
datetime.datetime(2017, 11, 19, 20, 40, 31, 317404)
>>> dt.datetime.utcnow()
datetime.datetime(2017, 11, 19, 19, 40, 48, 477620)
Und noch ein Nachtrag: utcnow und now ohne tzinfo erlauben keinen verlässlichen Vergleich: wenn ich in genau einer Stunde einen UTC timestamp nehme, vergleicht der mit now True.
Richtig wäre aber natürlich die 1 Stunde Differenz.
Wenn man das also richtig machen will, muss man mit tzinfo arbeiten. Wie sich das mit Django verhält weiß ich nicht, das nutze ich nicht.
Richtig wäre aber natürlich die 1 Stunde Differenz.
Wenn man das also richtig machen will, muss man mit tzinfo arbeiten. Wie sich das mit Django verhält weiß ich nicht, das nutze ich nicht.
- noisefloor
- User
- Beiträge: 3854
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Gruß, noisefloor
Axo - hatte ich anders verstanden.Und das habe ich gemeint.
Django nutzt `pytz` und ist "timezone aware". In der `settings.py` gibt man auch die Zeitzone an, in der man sich befindet bzw. von der Django aussehen soll. Konkret genutzt habe ich das aber auch nicht, weil es für meine Apps "reicht", wenn die Zeitstempel mit der aktuellen lokalen Zeit geschrieben werden. Habe keine Nutzer in anderen ZeitzonenWie sich das mit Django verhält weiß ich nicht, das nutze ich nicht.
Gruß, noisefloor