Postgresql i przygody ze strefami czasowymi

Chciałbym, abyśmy razem przeszli przez pewien krótki eksperyment, utwórz nową bazę danych postgresql i przygotuj jedną tabelę do testów:

CREATE TABLE test (timetz TIME WITH TIME ZONE, tstamp TIMESTAMP WITH TIME ZONE);

Teraz wypełnij tą tabelę przykładowymi danymi (w obu kolumnach pamiętaj dać tą samą strefę czasową):

INSERT INTO test (timetz, tstamp) VALUES ('16:00:00+06', '2013-02-21 16:00:00+06');

Teraz wyciągnij te dane i popatrz na efekt (załóżmy, że masz domyślną strefę czasową dla bazy na +1):

16:00:00+06 | 2013-02-21 11:00:00+01

Właśnie Cie zrobiono w konia.

Spędziłem dzisiejszy dzień debugując najróżniejsze zakątki aplikacji w poszukiwaniu ukrytego buga, który zupełnie niszczył nasze wyliczanie lokalnego czasu – wszystko po to, żeby zrozumieć, że przechowywanie i przedstawianie strefy czasowej jest różne dla typu TIME i typu TIMESTAMP w postgresie.

Icha.