SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Funktionsweise der Strftime()-Funktion in SQLite

Die SQLite strftime() Mit der Funktion können Sie einen Datums- und Uhrzeitwert in einem bestimmten Format zurückgeben.

Der tatsächlich zurückgegebene Datums-/Uhrzeitwert basiert auf einer Zeitzeichenfolge, die Sie beim Aufrufen der Funktion als Argument angeben, sowie auf allen Modifikatoren, die Sie (als optionale Argumente) einschließen. Mit einem Modifikator können Sie das Datum ändern, z. B. eine Anzahl von Tagen hinzufügen, es auf Ortszeit einstellen usw.

Syntax

Die Syntax lautet wie folgt:

strftime(format, timestring, modifier, modifier, ...)

Das format Das Argument kann eine beliebige Kombination gültiger Format-String-Ersetzungen für strftime() sein Funktion.

Die timestring Das Argument muss eine gültige Zeitzeichenfolge sein.

Der modifier Argumente sind optional. Sie können einen oder mehrere Modifikatoren angeben. Wenn Sie einen Modifikator angeben, muss es sich um einen gültigen Modifikator handeln.

Beispiel

Hier ist ein Beispiel zur Veranschaulichung.

SELECT strftime('%Y-%m-%d %H:%M:%S', 'now');

Ergebnis:

2020-04-29 01:29:54

Der now Zeitzeichenfolge wird basierend auf der bereitgestellten Formatzeichenfolge in das aktuelle Datum und die aktuelle Uhrzeit konvertiert.

In diesem Fall gibt meine Formatzeichenfolge genau dasselbe Ergebnis zurück wie datetime('now') zurückgekehrt wäre.

Modifizierer hinzufügen

Wir können das vorherige Ergebnis mit einem Modifikator ändern. Hier ist ein Beispiel.

SELECT strftime('%Y-%m-%d %H:%M:%S', 'now', '+2 hours');

Ergebnis:

2020-04-29 03:31:50

In diesem Fall habe ich die Zeit um zwei Stunden verlängert.

Mehrere Modifikatoren

Sie können mehrere Modifikatoren hinzufügen. Hier ist ein Beispiel für das Hinzufügen eines weiteren Modifikators zum vorherigen Beispiel.

SELECT strftime('%Y-%m-%d %H:%M:%S', 'now', '+2 hours', 'localtime');

Ergebnis:

2020-04-29 13:33:22

In meinem Fall die localtime Modifikator bewirkte, dass die Zeit nach vorne verschoben wurde.

Das liegt daran, dass die localtime Der Modifikator geht davon aus, dass die angegebene Zeitzeichenfolge in der koordinierten Weltzeit (UTC) angegeben ist. Anschließend wird die Zeitzeichenfolge so angepasst, dass die Ortszeit angezeigt wird.

Abhängig von Ihrer Ortszeit erhalten Sie möglicherweise ein anderes Ergebnis.

Hier wird wieder die ursprüngliche Ortszeit mit dem geänderten Ergebnis verglichen:

SELECT 
  strftime('%Y-%m-%d %H:%M:%S', 'now', 'localtime') AS "Local",
  strftime('%Y-%m-%d %H:%M:%S', 'now', '+2 hours', 'localtime') AS "Modified";

Ergebnis:

Local                Modified           
-------------------  -------------------
2020-04-29 11:34:57  2020-04-29 13:34:57

Unix/Epochenzeit

Sie können den %s verwenden Formatzeichenfolge (Kleinbuchstaben), um die Epochenzeit zu berechnen.

SELECT strftime('%s', 'now');

Ergebnis:

1588124826

Die Epochenzeit (auch bekannt als Epochenzeit, POSIX-Zeit, Sekunden seit der Epoche oder UNIX-Epochenzeit) ist die Anzahl der Sekunden seit dem 1.1.1970.

Die Unix-Zeit wird häufig in Betriebssystemen und Dateiformaten verwendet.

Julianischer Tag

Sie können %J verwenden um den Julianischen Tag zurückzugeben.

Julian Day ist die Anzahl der Tage seit dem Mittag in Greenwich am 24. November 4714 v. (unter Verwendung des proleptischen gregorianischen Kalenders).

Bei Verwendung des proleptischen julianischen Kalenders ist dies Montag, der 1. Januar 4713 v. Chr.

Der Julianische Tag wird normalerweise von Astronomen, Software usw. verwendet, um die verstrichenen Tage zwischen zwei Ereignissen zu berechnen.

So geben Sie den Julianischen Tag mit strftime() zurück Funktion.

SELECT strftime('%J', 'now');

Ergebnis:

2458968.575441667               

Eine andere Möglichkeit, dies in SQLite zu tun, ist die Verwendung von julianday() Funktion.

Zeitraum

Wie bei allen Datums- und Zeitfunktionen von SQLite ist strftime() funktioniert nur für Daten zwischen 0000-01-01 00:00:00 und 9999-12-31 23:59:59 (julianische Tagesnummern 1721059.5 bis 5373484.5).

Für Daten außerhalb dieses Bereichs sind die Ergebnisse nicht definiert.