Ich habe eine SQLite (v3) -Tabelle mit dieser Spaltendefinition:
"timestamp" DATETIME DEFAULT CURRENT_TIMESTAMP
Der Server, auf dem diese Datenbank lebt, befindet sich in der CST-Zeitzone. Wenn ich in meine Tabelle einfüge, ohne die Zeitstempelspalte einzuschließen, füllt sqlite dieses Feld automatisch mit dem aktuellen Zeitstempel in GMT und nicht mit CST.
Gibt es eine Möglichkeit, meine Einfügeanweisung so zu ändern, dass der gespeicherte Zeitstempel in CST angezeigt wird? Auf der anderen Seite ist es wahrscheinlich besser, sie in GMT zu speichern (falls die Datenbank beispielsweise in eine andere Zeitzone verschoben wird). Gibt es also eine Möglichkeit, meine ausgewählte SQL zu ändern, um den gespeicherten Zeitstempel in CST zu konvertieren, wenn ich aus der Tabelle extrahieren?
Antworten:
Ich habe in der SQLite-Dokumentation ( https://www.sqlite.org/lang_datefunc.html ) diesen Text gefunden:
Das sah nicht so aus, als würde es meinen Bedürfnissen entsprechen, also habe ich versucht, die "datetime" -Funktion ein wenig zu ändern, und bin zu folgendem Ergebnis gekommen:
Das scheint zu funktionieren - ist das der richtige Weg, um für Ihre Zeitzone zu konvertieren, oder gibt es einen besseren Weg, dies zu tun?
quelle
Verwenden Sie einfach die Ortszeit als Standard:
quelle
Sie sollten in der Regel Zeitstempel in der Datenbank in GMT belassen und diese nur bei der Eingabe / Ausgabe in / von der Ortszeit konvertieren, wenn Sie sie in den lokalen Zeitstempel des Benutzers (nicht des Servers) konvertieren können.
Es wäre schön, wenn Sie Folgendes tun könnten:
... um den Zeitstempel für einen Benutzer bei pazifischer Sommerzeit auszugeben. Das funktioniert leider nicht. Gemäß diesem SQLite-Lernprogramm (scrollen Sie nach unten zu "Andere Datums- und Zeitbefehle") können Sie jedoch nach der Uhrzeit fragen und gleichzeitig einen Versatz (in Stunden) anwenden. Wenn Sie also den Zeitzonenversatz des Benutzers kennen, sind Sie gut.
Beschäftigt sich jedoch nicht mit Sommerzeitregeln ...
quelle
In dem (zugegebenermaßen seltenen) Fall, dass eine lokale Datenzeit gewünscht wird (ich speichere beispielsweise die Ortszeit in einer meiner Datenbanken, da es mir nur darum geht, wie spät es am Tag ist und ich nicht verfolge, wo ich war In Bezug auf Zeitzonen ...) können Sie die Spalte als definieren
Der Teil% Y-% m-% dT% H:% M ist natürlich optional; So möchte ich, dass meine Zeit gespeichert wird. [Wenn mein Eindruck korrekt ist, gibt es in SQLite keinen Datentyp "DATETIME". Es spielt also keine Rolle, ob TEXT oder DATETIME als Datentyp in der Spaltendeklaration verwendet wird.]
quelle
Wenn eine Spalte mit "
NOT NULL DEFAULT CURRENT_TIMESTAMP
," definiert ist , werden eingefügte Datensätze immer mit der UTC / GMT-Zeit festgelegt.Folgendes habe ich getan, um zu vermeiden, dass die Zeit in meine INSERT / UPDATE-Anweisungen aufgenommen werden muss:
Testen Sie, ob es funktioniert ...
Hoffentlich hilft das.
quelle
quelle
SELECT datetime(CURRENT_TIMESTAMP, 'localtime')
quelle
Sie können die Zeitspalte auch einfach mit strftime () in einen Zeitstempel konvertieren:
Gibt Ihnen:
Die Tabellenspalte 'Zeitstempel' kann auch ein Textfeld sein, wenn Sie
current_timestamp
als STANDARD verwenden.Ohne Zeit:
Gibt Ihnen:
quelle
Ich denke, das könnte helfen.
quelle
Die aktuelle Zeit in der Zeitzone Ihrer Maschine:
Gemäß http://www.sqlite.org/lang_datefunc.html
quelle
Time ( 'now', 'localtime' )
und Datum( 'now', 'localtime' )
funktioniert.quelle