zeit differenzen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
snuffel55
User
Beiträge: 2
Registriert: Mittwoch 13. Juli 2016, 20:53

Hallo

Ich versuche ein Script zu schreiben bei dem die rundenzeit von Motorrad Fahren gemessen wird.
Die Fahrer müssen in jeder Runde einen rfid Chip scannen und dann wird u.a. die aktuelle Zeit in einer sqlite DB gespeichert.
Bei der nächsten Runde wird der Datensatz wieder aufgerufen und dann kommt mein Problem
Hier muss ich die gespeicherte Zeit von der aktuell gescannten Zeit abgezogen werden.

Mein Zeitstempel:
datetime.utcnow().strftime('%H%M%S%f')[:-2]
Wie kann ich den string umwandeln damit ich Zeiten damit berechnen kann
Ich Test schon 4 Tage komme aber nicht zurecht
MfG snuffel
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

datetime.utcnow() liefert dir einen brauchbare Zeitstempel mit dem du problemlos machen könntest was du willst, lässt sich sogar in einer SQLite Datenbank speichern, SQLite hat da extra einen Typen für. Dein Problem besteht darin dass du einen Schritt weitergehst und daraus einen String machst, mit dem man nichts sinnvolles anstellen kann. Anstatt den Fehler rückgängig zu machen, solltest du den Fehler gar nicht erst machen.
snuffel55
User
Beiträge: 2
Registriert: Mittwoch 13. Juli 2016, 20:53

Hallo,

Danke das du so schnell geantwortet hast, Ich habe den stamp jetzt umgestellt und mit dem Format klappt es allerdings nur probehalber, den Wert den er aus der sollte DB zieht nimmt er nicht als timestamp sondern als unicode
Wie kann ich das ändern?

Unsupported operand types for -: 'unicode' and 'datetime.datetime'
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@snuffel55: das ist ein typisches Problem mit SQLite für das es auch eine Standardlösung gibt.
Von hier ein kurzes Beispiel:

Code: Alles auswählen

>>> db = sqlite3.connect(':memory:', detect_types=sqlite3.PARSE_DECLTYPES)
>>> c = db.cursor()
>>> c.execute('create table foo (bar integer, baz timestamp)')
<sqlite3.Cursor object at 0x40fc50>
>>> c.execute('insert into foo values(?, ?)', (23, datetime.datetime.now()))
<sqlite3.Cursor object at 0x40fc50>
>>> c.execute('select * from foo')
<sqlite3.Cursor object at 0x40fc50>
>>> c.fetchall()
[(23, datetime.datetime(2009, 12, 1, 19, 31, 1, 40113))]
BlackJack

An der Stelle möchte ich gerne SQLAlchemy in den Raum werfen, das macht das freundlicherweise schon von Haus aus. :-)

Code: Alles auswählen

In [34]: import sqlalchemy as sa

In [35]: import datetime

In [36]: engine = sa.create_engine('sqlite:///:memory:')

In [37]: meta = sa.MetaData(bind=engine)

In [38]: foos = sa.Table('foo', meta, sa.Column('bar', sa.INT), sa.Column('baz', sa.TIMESTAMP))

In [39]: meta.create_all()

In [40]: foos.insert().values(bar=23, baz=datetime.datetime.now()).execute()
Out[40]: <sqlalchemy.engine.result.ResultProxy at 0x948cb8c>

In [41]: foos.select().execute().fetchall()
Out[41]: [(23, datetime.datetime(2016, 7, 14, 10, 40, 6, 340972))]
Antworten