2011-06-27 18 views
8

Jaki jest szybki i łatwy sposób na skorygowanie stref czasowych TIMESTAMP WITH TIME ZONE pól przypadkowo wprowadzonych w niewłaściwej strefie czasowej?Przesunięcie strefy czasowej aktualizacji PostgreSQL

W moim przypadku, następujące zapisy zostały wprowadzone błędnie w UTC, a nie w USA/Pacyfiku:

  t0   |   t1   |  what 
------------------------+------------------------+--------------- 
2011-06-01 13:00:00+00 | 2011-06-01 13:10:00+00 | recalibrating 
2011-06-01 13:10:00+00 | 2011-06-01 13:45:00+00 | verifying 
2011-06-01 13:45:00+00 | 2011-06-01 13:55:00+00 | FAULT 

Na szczęście żaden z błędnych zapisów przekroczyć granice letniego, więc godzina druga UTC może po prostu być skorygowany jako Pacyfik o drugiej.

Odpowiedz

9
UPDATE <table> SET <timestamptz_field> = (<timestamptz_field> AT TIME ZONE 'UTC') AT TIME ZONE '<correct_time_zone>'; 
5

Są to odlewy, a co ważniejsze, operator at time zone, które są przydatne do tego typu rzeczy, np .:

test=# select now(), 
       now()::timestamp; 

       now    |   now    
-------------------------------+---------------------------- 
2011-06-27 14:32:04.169292+02 | 2011-06-27 14:32:04.169292 
(1 row) 

test=# select now() at time zone 'utc', 
      (now() at time zone 'utc')::timestamp with time zone; 

      timezone   |   timezone    
----------------------------+------------------------------- 
2011-06-27 12:32:28.430479 | 2011-06-27 12:32:28.430479+02 
(1 row) 
Powiązane problemy