Gebruik timestamp with time zone
(timestamptz
) voor berekeningen.
Tijden voor alarmen kunnen time [without time zone]
zijn .
Maar je moet de tijdzone opslaan expliciet voor elke rij.
Nooit gebruik time with time zone
Het is een logisch gebroken type, het gebruik ervan wordt ontmoedigd door PostgreSQL. De handleiding:
Demo-instellingen:
CREATE TABLE alarm(name text, t time, tz text);
INSERT INTO alarm VALUES
('Alfred', '04:00', 'Europe/Stockholm') -- Alfred sets an alarm for 4 AM.
, ('Lotta', '05:00', 'Europe/Stockholm') -- Lotta sets an alarm for 5 AM.
, ('Sharon', '11:00', 'Asia/Singapore'); -- Sharon has set an alarm for 11 AM.
Het moeten tijdzone namen zijn (geen afkortingen) om rekening te houden met DST. Gerelateerd:
Krijg overeenkomende alarmen voor "vandaag":
SELECT *
FROM alarm
WHERE (('2012-07-01'::date + t) AT TIME ZONE tz AT TIME ZONE 'UTC')::time
= '03:00'::time
('2012-7-1'::date + t)
... assembleertimestamp [without time zone]
Kan ook gewoonnow()::date + t
. zijn voor "vandaag".AT WITH TIME ZONE tz
... plaats een tijdstempel in de opgeslagen tijdzone, wat resulteert intimestamptz
.AT WITH TIME ZONE 'UTC'
... ontvang volgens UTCtimestamp
::time
... eenvoudigste manier om de tijdcomponent te extraheren.
Hier kunt u tijdzonenamen :
SELECT *
FROM pg_timezone_names
WHERE name ~~* '%sing%'
LIMIT 10
SQL Fiddle zomer / winter demonstreren.