Datetime + Time wieder zusammenfügen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
sunshineh
User
Beiträge: 22
Registriert: Dienstag 3. Januar 2017, 11:21

Ich habe in meiner SQLite Tabelle die Spalte "dt" mit dem Datum und "time" mit der Uhrzeit.
Damit ich meine Werte nun in einem Chart darstellen kann, muss ich ja Datum und Uhrzeit wieder zusammen in eine Variable stecken.

Nach dem Auslesen sind die in row[0] und row[1].
sunshineh
User
Beiträge: 22
Registriert: Dienstag 3. Januar 2017, 11:21

Danke, das hab ich probiert mit:

Code: Alles auswählen

combined = datetime.combine(row[0],row[1])
Als Fehlermeldung erhalte ich dann
"AttributeError: 'module' object has no attribute 'combine'

wenn ich schreibe

Code: Alles auswählen

combined = datetime.datetime.combine(row[0],row[1])
Erhalte ich die Meldung
"TypeError: combine()argument 1 must be datetime.date, not unicode

Wenn ich mir row[0] und row[1] ausgeben lasse erhalte ich folgendes:
u'2018-11-20'
und
u'17:40'
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du hast behauptet du hast Zeit und Datum. Das sind Strings mit Zeit und Datum. Die kannst du zusammenkopieren und mit datetime.datetime.strptime parsen.

Noch besser waere aber, in sqlite gleich einen gemeinsamen timestamp zu speichern, der dann auch schon gleich als fertiges datetime.datetime-Objekt rauskommt, statt das so umstaendlich zusammen zu roedeln.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

sunshineh hat geschrieben: Dienstag 20. November 2018, 15:54 Ich habe in meiner SQLite Tabelle die Spalte "dt" mit dem Datum und "time" mit der Uhrzeit.
Dann hat Deine Datenbanktabelle einen Designfehler. Man sollte nie Datum und Uhrzeit in zwei getrennte Spalten packen. Warum ist das so? Ändere Deine Tabelle. `dt` ist ein schlechter Name für eine Tabellenspalte, weil sie eine kryptische Abkürzung ist.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1012
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Seit Python 3.7 hat datetime einen den alternativen Konstruktor fromisoformat.

Code: Alles auswählen

In [1]: import datetime                                                         

In [2]: now = datetime.datetime.now()                                           

In [3]: now                                                                     
Out[3]: datetime.datetime(2018, 11, 21, 9, 54, 47, 836854)

In [4]: iso8601 = now.isoformat()                                               

In [5]: iso8601                                                                 
Out[5]: '2018-11-21T09:54:47.836854'

In [6]: datetime.datetime.fromisoformat(iso8601)                                
Out[6]: datetime.datetime(2018, 11, 21, 9, 54, 47, 836854)

In [7]:  
Wenn du andere Module wie z.B. pytz richtig anwendest, sind auch die Zeizoneninformationen mit enthalten.
Ich hab mich mittlerweile drauf eingestellt generell Datum+Urhzeit im ISO8601 Format abzuspeichern.
Damit kommt jede Sprache und jede Datenbank mit klar. Außerdem ist es ein internationaler Standard.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@DeaD_EyE: Standardformate sind allgemein eine gute Idee aber bei Datenbanken würde ich doch die Formate nutzen, die von der DB angeboten werden. Und SQL kennt die Typen DATE, TIME und TIMESTAMP. Damit sollte also auch jede SQL-Datenbank und Programmiersprache klar kommen, die eine Anbindung an SQL-Datenbanken bietet. Mit dem Bonus, dass die spezifischen Typen in der Regel effizienter gespeichert werden können als Zeichenketten mit der ISO-Darstellung, und es auch Funktionen auf Datenbankseite gibt, die es erlauben mit Datums- und Zeitangaben in Abfragen zu operieren. Was es zum Beispiel unnötig macht Datum und Zeit in verschiedenen Spalten zu speichern, weil man in Abfragen auch bei einer TIMESTAMP-Spalte auf die einzelnen Komponenten zugreifen kann.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten