PostgreSQL में, आप timezone()
. का उपयोग कर सकते हैं टाइमस्टैम्प को दूसरे टाइमज़ोन में बदलने के लिए कार्य करता है।
सिंटैक्स
वाक्य रचना इस प्रकार है:
timezone(zone, timestamp)
जहां zone
वह समय क्षेत्र है जिसे आप timestamp
चाहते हैं में परिवर्तित करने का तर्क।
आपको मिलने वाला परिणाम इस बात पर निर्भर करेगा कि मूल टाइमस्टैम्प मान में टाइमज़ोन शामिल है या नहीं (और वह मान क्या है)।
उदाहरण 1 -जब मूल टाइमस्टैम्प में टाइमज़ोन शामिल हो
यहां बताया गया है कि जब मूल टाइमस्टैम्प में टाइमज़ोन शामिल होता है तो क्या होता है।
SELECT timezone('Indian/Mauritius', timestamp with time zone '2020-10-25 00:00:00+00');
परिणाम:
2020-10-25 04:00:00
जब मूल टाइमस्टैम्प में टाइमज़ोन शामिल होता है, तो timezone()
फ़ंक्शन मूल टाइमस्टैम्प मान को निर्दिष्ट समय क्षेत्र में स्थानांतरित करता है, और बिना समय क्षेत्र के मान लौटाता है।
अगर मैं इनपुट टाइमस्टैम्प का समय क्षेत्र बदलता हूं, तो यहां बताया गया है।
SELECT timezone('Indian/Mauritius', timestamp with time zone '2020-10-25 00:00:00+01');
परिणाम:
2020-10-25 03:00:00
परिणामी टाइमस्टैम्प को इनपुट टाइमज़ोन के अनुसार स्थानांतरित कर दिया जाता है।
और यदि आप timestamp with time zone
निर्दिष्ट करते हैं , लेकिन मूल टाइमस्टैम्प में वास्तव में टाइमज़ोन शामिल नहीं होता है, फिर मूल टाइमस्टैम्प मान को स्थानीय टाइमज़ोन में स्थानांतरित कर दिया जाता है।
SELECT timezone('Indian/Mauritius', timestamp with time zone '2020-10-25 00:00:00');
परिणाम:
2020-10-24 18:00:00
इस मामले में, परिणामी टाइमस्टैम्प छह घंटे पीछे रख दिया गया है। इसका मतलब है कि मेरा स्थानीय समय क्षेत्र भारतीय/मॉरीशस से छह घंटे आगे है।
हम उस समयक्षेत्र ऑफ़सेट को देख सकते हैं जिसका उपयोग सीधे इनपुट मान का चयन करके किया गया था।
SELECT timestamp with time zone '2020-10-25 00:00:00';
परिणाम:
2020-10-25 00:00:00+10
उदाहरण 2 - जब मूल टाइमस्टैम्प में टाइमज़ोन शामिल न हो
यहां बताया गया है कि जब मूल टाइमस्टैम्प नहीं होता तो क्या होता है एक समय क्षेत्र शामिल करें।
SELECT timezone('Indian/Mauritius', timestamp without time zone '2020-10-25 00:00:00');
परिणाम:
2020-10-25 06:00:00+10
जब मूल टाइमस्टैम्प में टाइमज़ोन शामिल नहीं होता है, तो परिणाम वर्तमान TimeZone
का उपयोग करके प्रदर्शित किया जाता है। सेटिंग और टाइमज़ोन ऑफ़सेट संलग्न है।
यह किसी भी समय लागू होता है जब आप timestamp without time zone
निर्दिष्ट करते हैं , भले ही टाइमस्टैम्प में वास्तव में टाइमज़ोन ऑफ़सेट हो।
SELECT timezone('Indian/Mauritius', timestamp without time zone '2020-10-25 00:00:00+12');
परिणाम:
2020-10-25 06:00:00+10
यह उम्मीद की जानी चाहिए, क्योंकि अगर मैं केवल timestamp without time zone
का चयन करता हूं मान, मुझे यही मिलता है:
SELECT timestamp without time zone '2020-10-25 00:00:00+12';
परिणाम:
2020-10-25 00:00:00
उदाहरण 3 - लोकलटाइमस्टैम्प
आइए localtimestamp
का उपयोग करें मेरे अपने टाइमज़ोन में वर्तमान टाइमस्टैम्प और timezone()
का उपयोग करने के बाद परिणामी टाइमस्टैम्प के बीच तुलना चलाने के लिए कार्य करता है इसे एक अलग समय क्षेत्र में बदलने के लिए कार्य करता है।
\x
SELECT
localtimestamp,
timezone('Indian/Mauritius', localtimestamp);
परिणाम:
localtimestamp | 2020-07-08 15:42:04.965221 timezone | 2020-07-08 21:42:04.965221+10
localtimestamp
फ़ंक्शन एक टाइमस्टैम्प देता है डेटा प्रकार, जो एक अंतर्निहित "बिना समय क्षेत्र" के साथ आता है। दूसरे शब्दों में, टाइमस्टैम्प और बिना समय क्षेत्र के टाइमस्टैम्प एक ही बात हैं।
जैसा कि पहले दिखाया गया है, जब मूल टाइमस्टैम्प में कोई टाइमज़ोन निर्दिष्ट नहीं किया जाता है, तो वर्तमान TimeZone
सेटिंग का उपयोग किया जाता है और परिणाम में जोड़ा जाता है। और इसलिए localtimestamp
. का उपयोग करते समय हमें यही मिलता है ।
वैसे, इस उदाहरण में मैंने \x
. का उपयोग किया है केवल पढ़ने में आसान बनाने के लिए, विस्तारित डिस्प्ले/वर्टिकल आउटपुट का उपयोग करके परिणाम प्रदर्शित करने के लिए।
उदाहरण 4 - current_timestamp
आइए अब current_timestamp
का उपयोग करें localtimestamp
के बजाय कार्य करें ।
SELECT
current_timestamp,
timezone('Indian/Mauritius', current_timestamp);
परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):
current_timestamp | 2020-07-08 15:42:04.335669+10 timezone | 2020-07-08 09:42:04.335669
इस बार टाइमज़ोन ऑफ़सेट को मूल टाइमस्टैम्प में जोड़ दिया गया है, और timezone()
परिणाम में अब यह शामिल नहीं है।
हमें यह परिणाम इसलिए मिलता है क्योंकि current_timestamp
फ़ंक्शन समय क्षेत्र के साथ टाइमस्टैम्प returns देता है डेटा प्रकार।
उदाहरण 5 - समय मानों का उपयोग करना
timezone()
फ़ंक्शन time
के साथ भी काम करता है मान (time with time zone
और time without time zone
)।
हालांकि, time with time zone
. पर इसका उपयोग करते समय मान, समय क्षेत्र ऑफ़सेट को परिणाम में जोड़ दिया जाता है।
SELECT
timezone('Indian/Mauritius', time with time zone '00:00:00+00'),
timezone('Indian/Mauritius', time with time zone '00:00:00+01'),
timezone('Indian/Mauritius', time with time zone '00:00:00');
परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):
timezone | 04:00:00+04 timezone | 03:00:00+04 timezone | 18:00:00+04
और पूर्णता के लिए, यहां वही मान दिए गए हैं जो time without time zone
का उपयोग कर रहे हैं डेटा प्रकार।
SELECT
timezone('Indian/Mauritius', time without time zone '00:00:00+00'),
timezone('Indian/Mauritius', time without time zone '00:00:00+01'),
timezone('Indian/Mauritius', time without time zone '00:00:00');
परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):
timezone | 18:00:00+04 timezone | 18:00:00+04 timezone | 18:00:00+04
स्थानीय समय क्षेत्र जांचें
यदि आप अपना स्थानीय समय क्षेत्र देखना चाहते हैं, तो SHOW TIMEZONE
run चलाएँ ।
जब मैं उस आदेश को चलाता हूं तो मुझे यही मिलता है।
SHOW TIMEZONE;
परिणाम:
Australia/Brisbane
टाइमज़ोन ऑफ़सेट जांचें
उपरोक्त ज्ञान से लैस, अब मैं pg_timezone_names
को क्वेरी करके दो टाइमज़ोन ऑफ़सेट की जांच कर सकता हूं देखें।
SELECT *
FROM pg_timezone_names
WHERE name = 'Indian/Mauritius'
OR name = 'Australia/Brisbane';
परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):
name | abbrev | utc_offset | is_dst --------------------+--------+------------+-------- Indian/Mauritius | +04 | 04:00:00 | f Australia/Brisbane | AEST | 10:00:00 | f
पोस्टग्रेज़ में टाइमज़ोन वापस करने के लिए अधिक विकल्पों और उदाहरणों के लिए पोस्टग्रेएसक्यूएल द्वारा समर्थित टाइमज़ोन की सूची लौटाएं देखें।