De verschillen worden behandeld in de PostgreSQL-documentatie voor datum/tijd-typen. Ja, de behandeling van TIME
of TIMESTAMP
verschilt tussen één WITH TIME ZONE
of WITHOUT TIME ZONE
. Het heeft geen invloed op hoe de waarden worden opgeslagen; het beïnvloedt hoe ze worden geïnterpreteerd.
De effecten van tijdzones op deze gegevenstypen worden specifiek behandeld in de documenten. Het verschil komt voort uit wat het systeem redelijkerwijs kan weten over de waarde:
-
Met een tijdzone als onderdeel van de waarde, kan de waarde worden weergegeven als een lokale tijd in de client.
-
Zonder een tijdzone als onderdeel van de waarde, is de voor de hand liggende standaardtijdzone UTC, dus wordt deze weergegeven voor die tijdzone.
Het gedrag verschilt afhankelijk van ten minste drie factoren:
- De tijdzone-instelling in de client.
- Het gegevenstype (d.w.z.
WITH TIME ZONE
ofWITHOUT TIME ZONE
) van de waarde. - Of de waarde is opgegeven met een bepaalde tijdzone.
Hier zijn voorbeelden van combinaties van deze factoren:
foo=> SET TIMEZONE TO 'Japan';
SET
foo=> SELECT '2011-01-01 00:00:00'::TIMESTAMP;
timestamp
---------------------
2011-01-01 00:00:00
(1 row)
foo=> SELECT '2011-01-01 00:00:00'::TIMESTAMP WITH TIME ZONE;
timestamptz
------------------------
2011-01-01 00:00:00+09
(1 row)
foo=> SELECT '2011-01-01 00:00:00+03'::TIMESTAMP;
timestamp
---------------------
2011-01-01 00:00:00
(1 row)
foo=> SELECT '2011-01-01 00:00:00+03'::TIMESTAMP WITH TIME ZONE;
timestamptz
------------------------
2011-01-01 06:00:00+09
(1 row)
foo=> SET TIMEZONE TO 'Australia/Melbourne';
SET
foo=> SELECT '2011-01-01 00:00:00'::TIMESTAMP;
timestamp
---------------------
2011-01-01 00:00:00
(1 row)
foo=> SELECT '2011-01-01 00:00:00'::TIMESTAMP WITH TIME ZONE;
timestamptz
------------------------
2011-01-01 00:00:00+11
(1 row)
foo=> SELECT '2011-01-01 00:00:00+03'::TIMESTAMP;
timestamp
---------------------
2011-01-01 00:00:00
(1 row)
foo=> SELECT '2011-01-01 00:00:00+03'::TIMESTAMP WITH TIME ZONE;
timestamptz
------------------------
2011-01-01 08:00:00+11
(1 row)