1Std zur Uhrzeit addieren

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
co-se
User
Beiträge: 20
Registriert: Dienstag 20. Oktober 2020, 13:36

Mein Code wie es werden soll
Es geht nicht über 21:00 Uhr als Begin hinaus mal vorweg

Code: Alles auswählen

now = datetime.datetime.today()
begin = time.strftime('%H:%M:%S', time.localtime())
#ende = begin + 1 Std
print begin
#print ende
:
ende mußte ich erst mal Kommetar setzen
es gabt versuche

Code: Alles auswählen

now = datetime.datetime.today()
begin = time.strftime('%H:%M:%S', time.localtime())
enh = time.strftime('%H', time.localtime())
enm = time.strftime('%M', time.localtime())
ens = time.strftime('%S', time.localtime())
nenh = enh + 1
ende = nenh + ":" + enm + ":" + ens
print begin
print ende
:
ich habe wie zu sehen die Zeit zerlegt und wollte zur std 1 dazu zählen
und wieder zusammen setzen

TypeError: cannot concatenate 'str' and 'int' objects
Ok, verstehe, kann 1 nicht zu enh addieren, weil es nicht gleiche sache ist (str ist nicht gleich int)

Code: Alles auswählen

das = "1"
now = datetime.datetime.today()
begin = time.strftime('%H:%M:%S', time.localtime())
enh = time.strftime('%H', time.localtime())
enm = time.strftime('%M', time.localtime())
ens = time.strftime('%S', time.localtime())
enh = enh + das
ende = enh + ":" + enm + ":" + ens
print "Begin = " + begin
print "Ende = " + ende
:
Begin = 16:15:34
Ende = 161:15:34
Warum nicht
Begin = 16:15:34
Ende = 17:15:34
????
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Was ist denn das für ein wildes Rumgeschlönsel mit geparsten Zeiten? Wenn du "jetzt" haben willst, solltest du nach "now" suchen.

Code: Alles auswählen

>>> import datetime
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2020, 11, 18, 16, 30, 52, 892064)
>>> than = now + datetime.timedelta(hours=1)
>>> than
datetime.datetime(2020, 11, 18, 17, 30, 52, 892064)
Benutzeravatar
DeaD_EyE
User
Beiträge: 1017
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Ich nenne das Bruteforce-Coding.
Man kann nicht einfach irgendwas schreiben und erwarten, dass der Computer (der Python Interpreter) die Gedankengänge magisch interpretieren kann. Wie soll das gehen?
Außerdem wäre es dann für andere Entwickler schwierig Gedankengänge nachzuvollziehen, wenn der Interpreter schwarze Magie anwendet.
D.h. man hätte dann auch keinen gemeinsamen Standard und jeder schreibt wie er lustig ist.

Zum Glück ist das noch nicht möglich.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
co-se
User
Beiträge: 20
Registriert: Dienstag 20. Oktober 2020, 13:36

Mein ganzer Code ist zusammen gestückelt
wo ich was gefunden hatte habe ich übernommen und getestet
In Bücher und im Internet wo ich suchte fand ich keine Lösung
Ich bastelle an einer E-Parkscheibe wo mit Knopfdruck Begin und geplante
Endzeit angezeigt werden soll
Daher meine Versuche zu einer Bestimmten Zeit nach Vorauswahl
nach Start drücken die gewählte Std dazu addiert werden sollen

now = datetime.datetime.today()
begin = time.strftime('%H:%M:%S', time.localtime())
print begin

soweit klappt alles
aber 1 std ( für die ersten tests ) dazu klappt nicht

gibt es überhaupt eine Lösung
unter PHP habe ich es gelöst bekommen schon mal
aber das kann ich hier nicht einsetzen
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@co-se: sparrow hat dir die Lösung doch schon gezeigt.
In specifications, Murphy's Law supersedes Ohm's.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Antwort ist von sparrow gegeben worden. Was daran ist unklar?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@co-se: PHP ist schwach typisiert, da kann man Zahlen mit Strings addieren und es kommt irgendwas raus, was, wenn man es richtig macht, vielleicht auch dem entspricht, was man möchte. Kurz, es ist ein Quell fröhlicher Fehlersuchen. Python dagegen ist stark typisiert, ein String wird nicht einfach so zur Zahl und auch nicht umgekehrt.

In Deinem Code ermittelst Du vier mal die aktuelle Zeit. Da kannst Du lustig daneben liegen, wenn Du die Stunde um 14:59:59 ermittelst und die Minuten erst um 15:00:00.
Gwöhn Dir auch gleich an, sprechende Variablennamen zu verwenden. Man darf gerne mehr als drei Buchstaben verwenden.

Python2 ist schon seit langem veraltet und wird nicht mehr gepflegt, steige auf Python3 um.
co-se
User
Beiträge: 20
Registriert: Dienstag 20. Oktober 2020, 13:36

Habe nun umgestellt auf python 3
aber jetzt will meine abfrage nicht mehr

Code: Alles auswählen

import RPi.GPIO as GPIO
import MFRC522
import signal
import datetime
import time
import mysql.connector
import os

#Zugriff auf Datenbank
mydb = mysql.connector.connect (host = "localhost",
				user = "root",
				password = "eadmin",
				database = "test")
bus = "ff"
mycursor = mydb.cursor()
sql = "SELECT d1, d2, d3, d3, d5 FROM db WHERE d6 = %s"
adr = (bus, )
mycursor.execute(sql, adr)
myresult = mycursor.fetchall()
for row in myresult:
    mycursor = mydb.cursor()
    sql = "INSERT INTO ess (v1, v2, v3) VALUES (%s, %s, %s)"
    val = ("1", "2", "3")
    mycursor.execute(sql, val)
    mydb.commit()
    print("Auftrag erledigt")
ohne abfrage kein problem
ist es möglich eine abfrage zu bekommen wenn bus = "uu" ist das ich eine meldung schreiben kann wie print("Nicht möglich")
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Was heißt denn "will nicht mehr"?
Fehlermeldung? Traceback? Was erwartest du, was passiert stattdessen?
co-se
User
Beiträge: 20
Registriert: Dienstag 20. Oktober 2020, 13:36

keine fehlermeldungung
meine SQL abfragen und eintragungen sind ok
unter python 2
a= cur.execute("SELECT d1, d2, d3, d3, d5 FROM db WHERE d6 = %s" ,bus )
if a == 0:
print "Auftrag erledigt"
continue
else:
print "Nicht möglich"
war das möglich
unter python3 nicht mehr
das nicht vorhanden sein wird nicht ausgeführt
besser gesagt ich weiß nicht wie ich es unter python3 sowas hinbekomme
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@co-se: Da fehlt die Abfrage des Ergebnisses von dem SELECT.

Das `a` was Du da verwendest ist undefiniert. `Cursor.execute()` gibt nichts zurück. Siehe hier den letzten Absatz: https://www.python.org/dev/peps/pep-0249/#id15
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
co-se
User
Beiträge: 20
Registriert: Dienstag 20. Oktober 2020, 13:36

das ist in python2 geschrieben da klappt es
unter python3

Code: Alles auswählen

import mysql.connector
mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  password="yourpassword",
  database="mydatabase"
)
mycursor = mydb.cursor()
sql = "SELECT * FROM customers, tools, windows WHERE tools = %s"
adr = ("YG2", )
mycursor.execute(sql, adr)
myresult = mycursor.fetchall()
so

Code: Alles auswählen

for row in myresult:
    if card == row[1]:
        print ("Auftrag erledigt")
        continue
    else:
        print ("Nicht möglich")
oder

Code: Alles auswählen

if sql == 0:
print ("Auftrag erledigt")
continue
else:
print ("Nicht möglich")
komme ich nicht weiter
ist mein Wert YG2 wenn er da ist dann kommt auftrag erledigt habe ich einen andeern Wert XG3 dann passiert nichts
brauche aber print ("Nicht möglich")
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@co-se: Das sieht sehr komisch aus. Das ``continue`` macht keinen Sinn. Und `sql` ist eine Zeichenkette, die kann niemals gleich dem Zahlwert 0 sein. `card` ist nicht definiert. Im letzten Quelltextschnippsel fehlt die Einrückung.

Falls `card` den Wert "YG2" hat, die Abfrage für `tools` in einem Datensatz aber "XG3" ist, dann gibt der gezeigte Code "Nicht möglich" aus.

Diese ganze `my`-Präfixe bei den Namen bringen keinen Mehrwert, die sollten da nicht stehen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
co-se
User
Beiträge: 20
Registriert: Dienstag 20. Oktober 2020, 13:36

mir klar das es komisch aussieht, aber im grunde geht es nicht wie ich es brauche und habe im internet und im buch nichts gefunden
auch versuche mit if was zu machen ist erfolglos
A = Wert ( ändert sich)
B irgenwo in einer Tabelle
SQL Abfrage = Hole mir Daten aus Tabelle mit Wert B was A hat
Schreibe mir Daten in andere Tabelle
Soweit so gut
ist aber A nicht in Tabelle wo B ist
dann bringe mir Fehlermeldung

das ist für mich nicht lösbar
co-se
User
Beiträge: 20
Registriert: Dienstag 20. Oktober 2020, 13:36

Eine möglichkeit habe ich noch gefunden
ich müßte über Shell arbeiten
os.system:
ich rufe also unter python die shell auf
... php run.php
aber wie ist es mit rückmeldungen an python um fehlermeldungen weiter zu bearbeiten
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Warum wllst du denn jetzt irgendwelche Dinge aufrufen? Das wirkt alles sehr... ungeplant und unkoordiniert.

Zeig deinen kompletten Code, der nicht funktioniert - nicht zerstückelt wie oben.
Zeige mögliche Fehlermeldungen.

Beschreibe präzise, was der Code machen soll und was sich anders verhält, als du erwartest.
co-se
User
Beiträge: 20
Registriert: Dienstag 20. Oktober 2020, 13:36

Abrufen klappt unter Python 2
cur = db.cursor()
a= cur.execute("SELECT dbid, dbnr, dbdbdach, dbdbland, dbwo FROM db WHERE dbwas = %s" ,card )
cur.close()
if a == 0:
print "Nicht vorhanden"
continue
else:
print "Vorhanden"

unter python 3 auch
mycursor = mydb.cursor()
sql = "SELECT dbvmglid, dbvmgl17 FROM dbvmgl WHERE dbvmgl17 = %s"
adr = (card, )
mycursor.execute(sql, adr)
wie zu sehen gibt es eine if abfrage unter python 2 mit bezug auf
a= cur.execute("SELECT dbid, dbnr, dbdbdach, dbdbland, dbwo FROM db WHERE dbwas = %s" ,card )
sowas brauche ich unter python3
aber ich habe noch nichts gefunden
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

cursor.execute liefert offiziell nichts zurück. Arbeite mit rowcount: https://www.python.org/dev/peps/pep-0249/#rowcount
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Oder weil das ja auch nicht wirklich sicher vorhanden ist vielleicht gleich ordentlich mit COUNT und `fetchone()`.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Feldnamen sind sehr schlecht. Warum hat dbdbland zweimal db? Oder was soll dbvmgl17 bedeuten? Wie bei Variablennamen sollten auch Feldnamen in Tabellen aussagekäftig sein und keine Abkürzungen enthalten.
Es gibt viele Möglichkeiten, wie man die Abfrage richtig macht, je nachdem, was Du eigentlich erreichen willst.
Wenn es wirklich nur um das Vorhandensein geht:

Code: Alles auswählen

cursor.execute("SELECT count(*) FROM db WHERE dbwas = %s" , card)
count = cursor.fetchone()[0]
if count == 0:
    print("Nicht vorhanden")
else:
    print("Vorhanden")
Wenn es exakt einen Eintrag gibt, und Du mit diesem Eintrag noch etwas machen willst:

Code: Alles auswählen

cursor.execute("SELECT dbid, dbnr, dbdbdach, dbdbland, dbwo FROM db WHERE dbwas = %s" , card)
entry = cursor.fetchone()
if entry is None:
    print("Nicht vorhanden")
else:
    print("Vorhanden")
Wenn es mehrere Einträge geben kann:

Code: Alles auswählen

cursor.execute("SELECT dbid, dbnr, dbdbdach, dbdbland, dbwo FROM db WHERE dbwas = %s" , card)
entries = cursor.fetchall()
if not entries:
    print("Nicht vorhanden")
else:
    print("Vorhanden")
Oder irgendeine Variante davon, je nachdem, was Du eigentlich machen willst. Daher ist es wichtig, dass Du hier beschreibst, was Du machen willst und nicht nur ein paar Codefragmente hinzuwerfen.
Antworten