2011-06-27 8 views
8

Saat dilimini yanlış saat diliminde girilen TIMESTAMP WITH TIME ZONE saat dilimlerini düzeltmenin hızlı ve kolay yolu nedir? Benim durumumdaPostgreSQL güncelleştirme saat dilimi ofseti

aşağıdaki kayıtlar ziyade ABD/Pasifik daha UTC yanlışlıkla giriş vardı:

  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 

Neyse ki, yanlış kayıtların hiçbiri ışığından sınırları aşan, bu nedenle 02:00 UTC basitçe can 2 saat Pasifik olarak düzeltilmelidir.

cevap

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

atmalarını vardır ve daha da önemlisi, bu tür bir şey için yararlı olan at time zone operatör, ör .:

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)