Hallo zusammen ,
ich habe eine Frage , wie kann ich einen timestamp setzen in Python .
Ich möchte gerne das man eine timestamp auf die Datenbank setzt und wenn die Zeit zb 60 min rum sind und man dann erneut das Programm öffnet soll dann zb was anderes angezeigt werden .
Also kleines Beispiel
If Kunde.time >= time() - 1800
Mach was
Timer Abfrage
Hallo,
dafür gibt es `monotonic`:
Grüße
Dennis
dafür gibt es `monotonic`:
Code: Alles auswählen
from time import monotonic, sleep
# In seconds
TIMEOUT = 5
def main():
timestamp = monotonic()
print("Warten", end="")
while True:
print(".", end="")
if monotonic() - timestamp >= TIMEOUT:
print("\nMach was")
break
sleep(0.1)
if __name__ == '__main__':
main()
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
-
- User
- Beiträge: 142
- Registriert: Mittwoch 5. Februar 2025, 12:55
Ah okay , danke für den Hinweis .
@Dennis89: ich denke der Timestamp soll in eine Datenbank, dann ist monotonic nich geeignet.
@TorstenVoelker: Datenbanken haben dafür typischerweise einen Typ namens TIMESTAMP. Der wird in Python normalerweise in ein datetime.datetime-Objekt umgewandelt. Mit datetime.timedelta kannst du dann noch 60min rauf oder runter rechnen.
@TorstenVoelker: Datenbanken haben dafür typischerweise einen Typ namens TIMESTAMP. Der wird in Python normalerweise in ein datetime.datetime-Objekt umgewandelt. Mit datetime.timedelta kannst du dann noch 60min rauf oder runter rechnen.
-
- User
- Beiträge: 142
- Registriert: Mittwoch 5. Februar 2025, 12:55
Okay , werde es mal nachher versuchen .
Aber danke .
Frohe Ostern Euch !!!
Aber danke .
Frohe Ostern Euch !!!
- noisefloor
- User
- Beiträge: 4172
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
es gibt auch Datenbanken, bei denen man eine TTL (time to live) für einen Wert setzen kann. Ist die TTL um, ist der Werk in der Datenbank weg bzw. die Datenbank löscht den selbstständig.
Ansonsten müsstest du mal ein bisschen konkreter werden, was du genau vorhast und das bei dir "die Datenbank" ist.
Gruß, noisefloor
es gibt auch Datenbanken, bei denen man eine TTL (time to live) für einen Wert setzen kann. Ist die TTL um, ist der Werk in der Datenbank weg bzw. die Datenbank löscht den selbstständig.
Ansonsten müsstest du mal ein bisschen konkreter werden, was du genau vorhast und das bei dir "die Datenbank" ist.
Gruß, noisefloor
Und da es in dem anderen Thread um mySQL geht, noch der Hinweis: Man kann das vergeben des Zeitstempels auch komplett der Datenbank überlassen. Und sollte das auch tun, falls man dem System, welches das Statement an die Datenbank sende, nicht vertrauen kann.
-
- User
- Beiträge: 142
- Registriert: Mittwoch 5. Februar 2025, 12:55
Einen schönen guten tag zusammen ,
ich brauche mal Professionelle Hilfe .
Ich habe ein Script wo man eine Zeit setzt in die Datenbank also eine Datetime.now() und dann
möchte ich das gerne das man es so ausgibt wie , Du bist noch 5 Minuten Unterwegs .
Nach dieser Zeit soll dann ein Update erfolgen die dann die Datetime löscht und zb dann 1 Punkt in die Datenbank setzt .
Ich habe micb lange mit Timedelta und Time Beschäftigt aber irgendwie bekomme ich das nicht hin.
Ich wollte es versuchen mit
In Name.time >= timedelta(Minuten=30) :
Print("du bist unterwegs ")
Else
Fertig
Aber da kommt der Fehler das dass Zeichen > nicht erlaubt ist .
ich brauche mal Professionelle Hilfe .
Ich habe ein Script wo man eine Zeit setzt in die Datenbank also eine Datetime.now() und dann
möchte ich das gerne das man es so ausgibt wie , Du bist noch 5 Minuten Unterwegs .
Nach dieser Zeit soll dann ein Update erfolgen die dann die Datetime löscht und zb dann 1 Punkt in die Datenbank setzt .
Ich habe micb lange mit Timedelta und Time Beschäftigt aber irgendwie bekomme ich das nicht hin.
Ich wollte es versuchen mit
In Name.time >= timedelta(Minuten=30) :
Print("du bist unterwegs ")
Else
Fertig
Aber da kommt der Fehler das dass Zeichen > nicht erlaubt ist .
Code: Alles auswählen
abfrage = conn()
c = abfrage.cursor()
c.execute("SELECT time FROM spiel WHERE user = %s",[name.user])
time = c.fetchone()
abfrage.close()
a1 = ct.CTkButton(link3, text="Los ", text_color="black", bg_color="green", corner_radius=25,command= lambda : kunde.start_los(name))
a1.place(y=200, x=300)
def start_los(self):
self.user = self.user
now = datetime.now()
los = conn()
los_c = los.cursor()
los_c.execute("UPDATE spiel SET time = %s WHERE user = %s",(now,self.user))
los.commit()
los.close()
info_text.configure(link3,text=f"Du bist jetzt Unterwegs",text_color="red",font=("arial",15))
- noisefloor
- User
- Beiträge: 4172
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Poste mal bitte den _relevante_ Code, wo der Fehler auftritt, inkl. vollem Stacktrace. Nicht versuchen, das in Volltextprosa zu beschreiben.
ist jedenfalls kein valides Python. Und erinnere dich mal dran, was dir schon mehrfach bzgl. sinnvoller, aussagekräftiger Variablenname gesagt wurde...
Gruß, noisefloor
Code: Alles auswählen
In Name.time >= timedelta(Minuten=30) :
Gruß, noisefloor
Timedelta ist, wie der Name schon sagt, eine Differenz zwischen zwei Zeitpunkten. Ist der 4. Mai jetzt mehr oder weniger als 30 Minuten? Die Frage macht keinen Sinn, und das sagt dir Python auch. Sinn macht nur die Frage, ob zwischen den Zeitpunkten x und y mehr oder weniger als 30min liegen.
-
- User
- Beiträge: 142
- Registriert: Mittwoch 5. Februar 2025, 12:55
Danke für die antworten aber irgendwie komme ich nicht dahinter . Habe mir ein Tutorial angeschaut bei YouTube aber naja die meisten Tutorials sind Käse weil es Wird einfach was programmiert und keine Deutung warum ist es so , was macht der Befehl x mit Befehl x . Also unbrauchbar .
- __blackjack__
- User
- Beiträge: 13997
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@TorstenVoelker: Dann muss man sich das halt erarbeiten. Der „Befehl x“ ist ja ziemlich sicher irgendwo dokumentiert. Also beispielsweise das `datetime`-Modul und was da so an Datentypen enthalten sind, was die repräsentieren, und was man damit machen kann, steht in der Python-Dokumentation.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
-
- User
- Beiträge: 142
- Registriert: Mittwoch 5. Februar 2025, 12:55
Ich habe mich in Sachen Datetime eingelesen und auch verstanden . Ich weiß wie man ein datetime setzt und mit strftime schreibt etc .
Nur was mir fehlt ist , wie bei php das man eine time setzt in die Datenbank dann einen Timestanp ausgibt und ich dann einfach dann nur if kunde.time >= time() - 1800 mach das ansonsten was anderes .
Aber das geht anscheinend bei Python nicht .
Habe schon alles versucht aber die Datenbank gibt es als datetime String aus und da kommt mir die Frage wie soll ich das jetzt umrechnen .
Naja egal hatte es versucht aber wenn es nicht geht oder ich es nicht hinbekomme dann ist es so und gut .
Trotzdem danke für die Antworten und einen schönen Abend!
Nur was mir fehlt ist , wie bei php das man eine time setzt in die Datenbank dann einen Timestanp ausgibt und ich dann einfach dann nur if kunde.time >= time() - 1800 mach das ansonsten was anderes .
Aber das geht anscheinend bei Python nicht .
Habe schon alles versucht aber die Datenbank gibt es als datetime String aus und da kommt mir die Frage wie soll ich das jetzt umrechnen .
Naja egal hatte es versucht aber wenn es nicht geht oder ich es nicht hinbekomme dann ist es so und gut .
Trotzdem danke für die Antworten und einen schönen Abend!
Wenn Du das, was du in php schreiben würdest, mit dem vergleichst, was du in python geschrieben hast, dann sollte dir der Unterschied auffallen. Logik ist unabhängig von der Programmiersprache. PHP ist halt dumm im Sinne von, dass ein Fehler wie du ihn in Python gemacht hast, nicht zu einer Fehlermeldung führt, sondern nur zu einer fehlerhaften Programmausführung.
-
- User
- Beiträge: 142
- Registriert: Mittwoch 5. Februar 2025, 12:55
Jetzt bin ich schlauer und kann es bestimmt .






- noisefloor
- User
- Beiträge: 4172
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
was du inzwischen hoffentlich gelernt hast: man lernt keine Programmiersprache durch Videos bzw. zuschauen. Größter Nachteil, wie du schon festgestellt hast: du hast keine Einfluss auf die Lerngeschwindigkeit. Programmieren lernen ist IMHO das Wechselspiel aus Lesen und selber schreiben und Fehler machen und nachlesen und besser machen.
Ist die Persistenz des Zeitstempels eigentlich irgendwie wichtig, dass der in der DB gespeichert werden muss? Ansonsten einfach im Speicher halten.
Gruß, noisefloor
was du inzwischen hoffentlich gelernt hast: man lernt keine Programmiersprache durch Videos bzw. zuschauen. Größter Nachteil, wie du schon festgestellt hast: du hast keine Einfluss auf die Lerngeschwindigkeit. Programmieren lernen ist IMHO das Wechselspiel aus Lesen und selber schreiben und Fehler machen und nachlesen und besser machen.
Stimmt in der Pauschalität nicht. Es kommt maßgeblich drauf an, was das Datenbankmodul, dass du nutzt, an Umwandlungen macht (oder nicht). Du könntest auch ein ORM (wie SQLAlchemy) nutzen - aber ich denke, das ist drei Schritte zu früh für dich. Was du manchen könntest: Unix Timestamps benutzen. Das ist ein Integerwert, d.h. da gibt es keine "Verluste" zwischen DB und Python.Habe schon alles versucht aber die Datenbank gibt es als datetime String aus und da kommt mir die Frage wie soll ich das jetzt umrechnen .
Ist die Persistenz des Zeitstempels eigentlich irgendwie wichtig, dass der in der DB gespeichert werden muss? Ansonsten einfach im Speicher halten.
Gruß, noisefloor
@noisefloor: nein hier ist alles in Ordnung. Die Datenbank liefert für ein TIMESTAMP ein datetime-Objekt. Niemand möchte mit Zahlen als Datumswerte arbeiten, denn das ist fehleranfällig. Das wäre ja so, als ob man statt pathlib einfache Strings für Pfade empfehlen würde. Das Problem liegt nicht an den Datentypen und auch nicht an der Programmiersprache, sondern an der Logik, dass numal ein Zeitpunkt etwas anders ist als eine Zeitspanne. Wenn man den Unterschied nicht kapiert, kann man nur fehlerhafte Programme schreiben.
- __blackjack__
- User
- Beiträge: 13997
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Wobei PHP das doch schon bemerkt, denn da wird bei dem Versuch ein `DateTime`-Objekt mit einer ganzen Zahl zu vergleichen, folgendes protokolliert:
PHP Notice: Object of class DateTime could not be converted to int in /home/bj/test.php on line 8
Was völlig lautlos durchgeht ist ein Vergleich zwischen Zeichenkette mit Datum/Zeit im ISO-Format und einer ganzen Zahl. Das ging in Python 2 ja auch noch, ist aber dann eben auch semantisch falsch, und wenn man das nicht beabsichtigt hat.
PHP Notice: Object of class DateTime could not be converted to int in /home/bj/test.php on line 8
Was völlig lautlos durchgeht ist ein Vergleich zwischen Zeichenkette mit Datum/Zeit im ISO-Format und einer ganzen Zahl. Das ging in Python 2 ja auch noch, ist aber dann eben auch semantisch falsch, und wenn man das nicht beabsichtigt hat.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
-
- User
- Beiträge: 142
- Registriert: Mittwoch 5. Februar 2025, 12:55
Hi , ich versuche von der Datetime das Time.time() zur verwenden,
da ich den Zeitstempel in der Datenbank speichern will.
Aber, es kommt immer der Fehler.
Ich habe einfach mal ein Test versucht wo ich in der Datenbank die Time zeile habe als Float , da ja der Zeitstempel ein Float ist .
Aber es funzt nüscht.
Bevor wieder kommt , wie kommst Du auf Float , dann frage mein Buch da drin steht : das die Time.time ein float ist .
da ich den Zeitstempel in der Datenbank speichern will.
Aber, es kommt immer der Fehler.
Ich habe einfach mal ein Test versucht wo ich in der Datenbank die Time zeile habe als Float , da ja der Zeitstempel ein Float ist .
Aber es funzt nüscht.
Bevor wieder kommt , wie kommst Du auf Float , dann frage mein Buch da drin steht : das die Time.time ein float ist .
Code: Alles auswählen
/home/torsten/PycharmProjects/Spiel_Game/.venv/bin/python /home/torsten/PycharmProjects/Spiel_Game/main.py
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.12/tkinter/__init__.py", line 1967, in __call__
return self.func(*args)
^^^^^^^^^^^^^^^^
File "/home/torsten/PycharmProjects/Spiel_Game/.venv/lib/python3.12/site-packages/customtkinter/windows/widgets/ctk_button.py", line 554, in _clicked
self._command()
File "/home/torsten/PycharmProjects/Spiel_Game/main.py", line 160, in <lambda>
a1 = ct.CTkButton(link3, text="Los ", text_color="black", bg_color="green", corner_radius=25,command= lambda : kunde.start_stein(name))
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/torsten/PycharmProjects/Spiel_Game/main.py", line 27, in start_stein
jetzt = time.time()
^^^^^^^^^
AttributeError: 'builtin_function_or_method' object has no attribute 'time'
Das sind die absoluten Python-Grundlagen, zu verstehen, was ein Modul ist und was eine Funktion. Wenn man `import time` schreibt, importiert man das Modul, bei `from time import time` die Funktion `time` aus dem gleichnamigen Modul.
Aber Zeit als Zahl aufzufassen ist falsch. Das hattest Du doch davor schon besser. In Datenbanken ist der richtig Typ TIMESTAMP, in Python wird das zu einem datetime.datetime.
Und die aktuelle Zeit ist `datetime.datetime.now()`.
Das alles weißt Du doch schon; falls Du das wieder vergessen hast, lies doch einfach Deinen eigenen Beitrag vom Dienstag 6. Mai 2025, 14:17Uhr.
Aber Zeit als Zahl aufzufassen ist falsch. Das hattest Du doch davor schon besser. In Datenbanken ist der richtig Typ TIMESTAMP, in Python wird das zu einem datetime.datetime.
Und die aktuelle Zeit ist `datetime.datetime.now()`.
Das alles weißt Du doch schon; falls Du das wieder vergessen hast, lies doch einfach Deinen eigenen Beitrag vom Dienstag 6. Mai 2025, 14:17Uhr.