In PostgreSQL ist die Formatierung von Zeitstempeln unabhängig von der Speicherung. Eine Antwort ist die Verwendung von to_char
und formatieren Sie den Zeitstempel in dem Format, das Sie im Moment benötigen, wie hier:
select to_char(current_timestamp, 'yyyy-MM-dd HH24:MI:SS.MS');
select to_timestamp('2012-10-11 12:13:14.123',
'yyyy-MM-dd HH24:MI:SS.MS')::timestamp;
Aber wenn Sie die Standardformatierung festlegen müssen:
Ändern Sie das postgresql-Zeitstempelformat global:
Sehen Sie sich Ihre Zeitzone an, führen Sie dies als SQL-Abfrage aus:
show timezone
Result: "US/Eastern"
Wenn Sie also current_timestamp ausdrucken, sehen Sie Folgendes:
select current_timestamp
Result: 2012-10-23 20:58:35.422282-04
Der -04
am Ende ist Ihre Zeitzone relativ zu UTC. Sie können Ihre Zeitzone ändern mit:
set timezone = 'US/Pacific'
Dann:
select current_timestamp
Result: 2012-10-23 18:00:38.773296-07
Beachten Sie also den -07
dort bedeutet das, dass wir Pacific 7 Stunden von UTC entfernt sind. Wie kann ich diese unansehnliche Zeitzone verschwinden lassen? Eine Möglichkeit besteht darin, einfach eine Tabelle zu erstellen, die standardmäßig einen Zeitstempel ohne Zeitzone verwendet:
CREATE TABLE worse_than_fail_table
(
mykey INT unique not null,
fail_date TIMESTAMP not null
);
Wenn Sie dieser Tabelle dann einen Zeitstempel hinzufügen und daraus auswählen
select fail_date from worse_than_fail_table
Result: 2012-10-23 21:09:39.335146
yay, keine Zeitzone am Ende. Aber Sie möchten mehr Kontrolle darüber, wie der Zeitstempel standardmäßig angezeigt wird! Sie könnten etwa so vorgehen:
CREATE TABLE moo (
key int PRIMARY KEY,
boo text NOT NULL DEFAULT TO_CHAR(CURRENT_TIMESTAMP,'YYYYMM')
);
Es ist ein Textfeld, das Ihnen mehr Kontrolle darüber gibt, wie es standardmäßig angezeigt wird, wenn Sie select somecolumns from sometable
ausführen . Beachten Sie, dass Sie einen String in timestamp umwandeln können:
select '2012-10-11 12:13:14.56789'::timestamp
Result: 2012-10-11 12:13:14.56789
Sie könnten einen current_timestamp in timestamp
umwandeln wodurch die Zeitzone entfernt wird:
select current_timestamp::timestamp
Result: 2012-10-23 21:18:05.107047
Sie können die Zeitzone wie folgt loswerden:
select current_timestamp at time zone 'UTC'
Result: "2012-10-24 01:40:10.543251"
Aber wenn Sie die Zeitzone wirklich zurückhaben möchten, können Sie Folgendes tun:
select current_timestamp::timestamp with time zone
Result: 2012-10-23 21:20:21.256478-04
Mit extract:
können Sie herausziehen, was Sie wollenSELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40');
Result: 20
Und diese Monstrosität:
SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'EST';
Result: 2001-02-16 20:38:40