it-swarm.com.de

Now () ohne Zeitzone

Ich habe eine Spalte added_at Vom Typ timestamp without time zone. Ich möchte, dass der Standardwert die aktuelle Datums- und Uhrzeitangabe ohne Zeitzone ist. Die Funktion now() gibt auch eine Zeitzone zurück.

Wie löse ich das Problem?

56
アレックス
SELECT now()::timestamp

Das ist alles. Die Besetzung konvertiert den Zeitstempel in den aktuellen Zeitstempel Ihrer Zeitzone. So wird auch die Standard SQL Funktion LOCALTIMESTAMP in Postgres implementiert.

Wenn Sie nicht in mehreren Zeitzonen arbeiten, funktioniert das einwandfrei. Andernfalls wechseln Sie zu timestamptz für added_at. Der Unterschied?

63

Nun können Sie etwas tun wie:

SELECT now() AT TIME ZONE current_setting('TimeZone');
SELECT now() AT TIME ZONE 'Europe/Paris';
SELECT now() AT TIME ZONE 'UTC';

Ich bin mir nicht sicher, wie das für eine Spalte "added_at" Sinn macht. Sie möchten fast immer einen absoluten Zeitstempel (Zeitstempel mit Zeitzone), keinen schwebenden.


Bearbeiten Sie die Antwort auf die folgenden Punkte:

  1. Ja, sollte Zeitstempel mit Zeitzone (absolute Zeit) verwenden, es sei denn, Sie haben einen guten Grund, dies nicht zu tun.

  2. Die Client-Zeitzone wird wie oben gezeigt durch SHOW TimeZone Oder current_setting(...) angegeben.

Nehmen Sie sich etwas Zeit, um die Handbücher zu überfliegen - sie decken das alles ziemlich gut ab.

35
Richard Huxton

"Aktuelles Datum/Uhrzeit" :

CURRENT_TIME und CURRENT_TIMESTAMP liefern Werte mit Zeitzone. LOCALTIME und LOCALTIMESTAMP liefern Werte ohne Zeitzone.

17
Milen A. Radev