मैं इस स्टैकओवरफ्लो प्रश्न का उत्तर दे रहा था और अजीब परिणाम मिला:
select * from pg_timezone_names where name = 'Europe/Berlin' ;
name | abbrev | utc_offset | is_dst
---------------+--------+------------+--------
Europe/Berlin | CET | 01:00:00 | f
और अगली क्वेरी
select id,
timestampwithtimezone,
timestampwithtimezone at time zone 'Europe/Berlin' as berlin,
timestampwithtimezone at time zone 'CET' as cet
from data ;
id | timestampwithtimezone | berlin | cet
-----+------------------------+---------------------+---------------------
205 | 2012-10-28 01:30:00+02 | 2012-10-28 01:30:00 | 2012-10-28 00:30:00
204 | 2012-10-28 02:00:00+02 | 2012-10-28 02:00:00 | 2012-10-28 01:00:00
203 | 2012-10-28 02:30:00+02 | 2012-10-28 02:30:00 | 2012-10-28 01:30:00
202 | 2012-10-28 02:59:59+02 | 2012-10-28 02:59:59 | 2012-10-28 01:59:59
106 | 2012-10-28 02:00:00+01 | 2012-10-28 02:00:00 | 2012-10-28 02:00:00
मैं PostgreSQL 9.1.2 और ubuntu 12.04 का उपयोग कर रहा हूं।
बस जाँच की कि 8.2.11 परिणाम पर एक ही है।
दस्तावेज़ीकरण के अनुसार यह कोई फर्क नहीं पड़ता कि मैं नाम या संक्षिप्त नाम का उपयोग करता हूं।
क्या यह एक बग है?
क्या मुझसे कुछ गलत हो रही है?
क्या कोई इस परिणाम की व्याख्या कर सकता है?
EDIT टिप्पणी के लिए कि CET यूरोप / बर्लिन नहीं है।
मैं अभी pg_timezone_names से मान चुन रहा हूं।
select * from pg_timezone_names where abbrev ='CEST';
name | abbrev | utc_offset | is_dst
------+--------+------------+--------
तथा
select * from pg_timezone_names where abbrev ='CET';
name | abbrev | utc_offset | is_dst
---------------------+--------+------------+--------
Africa/Tunis | CET | 01:00:00 | f
Africa/Algiers | CET | 01:00:00 | f
Africa/Ceuta | CET | 01:00:00 | f
CET | CET | 01:00:00 | f
Atlantic/Jan_Mayen | CET | 01:00:00 | f
Arctic/Longyearbyen | CET | 01:00:00 | f
Poland | CET | 01:00:00 | f
.....
सर्दियों के दौरान यूरोप / बर्लिन +01 है। गर्मियों के दौरान यह +02 है।
EDIT2
2012-10-28 टाइमज़ोन में गर्मियों के समय से सर्दियों के समय में 2:00 बजे बदल गया है।
यह दो रिकॉर्ड यूरोप / बर्लिन में समान है:
204 | 2012-10-28 02:00:00+02 | 2012-10-28 02:00:00 | 2012-10-28 01:00:00
106 | 2012-10-28 02:00:00+01 | 2012-10-28 02:00:00 | 2012-10-28 02:00:00
यह सुझाव देता है कि अगर मैं बड़ी डेटा रेंज (गर्मियों के समय और सर्दियों के समय) के लिए संक्षिप्त (CET या CEST) में से किसी एक का उपयोग करता हूं, तो परिणाम कुछ रिकॉर्ड के लिए गलत होगा। अच्छा होगा यदि मैं 'यूरोप / बर्लिन' का उपयोग करूं।
मैंने सिस्टम का समय बदलकर '2012-01-17' कर दिया है और pg_timezone_names भी बदल गया है।
select * from pg_timezone_names where name ='Europe/Berlin';
name | abbrev | utc_offset | is_dst
---------------+--------+------------+--------
Europe/Berlin | CEST | 02:00:00 | t
CET
है नहीं Europe/Berlin
- कम से कम डीएसटी समय के दौरान नहीं।
2012-10-28 01:30:00
सीईएसटी है, सीईटी नहीं।