Seite 1 von 1

Datetime + Time wieder zusammenfügen

Verfasst: Dienstag 20. November 2018, 15:54
von sunshineh
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].

Re: Datetime + Time wieder zusammenfügen

Verfasst: Dienstag 20. November 2018, 15:59
von __deets__

Re: Datetime + Time wieder zusammenfügen

Verfasst: Dienstag 20. November 2018, 17:48
von sunshineh
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'

Re: Datetime + Time wieder zusammenfügen

Verfasst: Dienstag 20. November 2018, 17:58
von __deets__
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.

Re: Datetime + Time wieder zusammenfügen

Verfasst: Dienstag 20. November 2018, 20:57
von Sirius3
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.

Re: Datetime + Time wieder zusammenfügen

Verfasst: Mittwoch 21. November 2018, 09:59
von DeaD_EyE
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.

Re: Datetime + Time wieder zusammenfügen

Verfasst: Mittwoch 21. November 2018, 11:22
von __blackjack__
@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.