आपको इसके अतिरिक्त समय क्षेत्र ऑफ़सेट भी सहेजना होगा timestamp
. के लिए .
जैसा कि @Milen ने पहले ही समझाया है (और मैनुअल
से जुड़ा हुआ है ):एक timestamp
केवल समय में एक बिंदु बचाता है (सार मूल्य के रूप में)। समय क्षेत्र संशोधक नहीं है सहेजा गया है, यह केवल timestamp
. को समायोजित करने का कार्य करता है UTC
. के सापेक्ष ।
निम्नलिखित डेमो पर विचार करें:
-- DROP TABLE tbl;
CREATE TEMP TABLE tbl (id int, myts timestamptz, mytz interval);
INSERT INTO tbl VALUES
(1, now() , EXTRACT (timezone from now()) * interval '1s')
,(2, '2012-01-01 00:00-05', interval '-5h')
,(3, '2012-01-01 00:00+04', interval '4h')
,(4, '2012-11-11 20:30+03', interval '3h');
SELECT *
,(myts AT TIME ZONE mytz)::text
|| CASE WHEN mytz > '0:0' THEN '+' ELSE '' END
|| to_char(mytz, 'FMHH24:mi') AS timestamp_at_origin
FROM tbl;
इसे देखने के लिए स्थानीय रूप से चलाएं। <के विवरण पर विशेष ध्यान दें मजबूत>समय क्षेत्र में
निर्माण, और मैं कैसे समय क्षेत्र को (स्थानीय!) timestamp with time zone
. से निकालता हूं .now()
रिटर्न timestamp with time zone
या timestamptz
संक्षेप में।
EXTRACT (timezone from now()) * interval '1s'
timestamp_at_origin
समय क्षेत्र के साथ टाइमस्टैम्प प्रदर्शित करता है जैसा कि इसके मूल में देखा गया है। अगर मैं आपका प्रश्न समझ गया, तो आप यही खोज रहे हैं।
आप स्वरूपण में और सुधार कर सकते हैं।
आपको इस संबंधित प्रश्न में रुचि हो सकती है जो समय क्षेत्रों की अस्पष्टताओं और कमियों पर कुछ प्रकाश डालता है।