आमतौर पर हम किसी भी देश का मौजूदा लोकल टाइम चेक करने के लिए गूगल करते थे। इस पोस्ट में मैं एक उदाहरण दे रहा हूं कि आप किसी भी देश का वर्तमान स्थानीय समय PL/SQL में कैसे प्राप्त कर सकते हैं। आप V$TIMEZONE_NAMES के माध्यम से देश के नामों की सूची प्राप्त कर सकते हैं ओरेकल में देखें। मैं देश के नाम प्राप्त करने के लिए इस शब्दकोश दृश्य का उपयोग कर रहा हूं और समय क्षेत्र मान प्राप्त करने के लिए TZ_OFFSET फ़ंक्शन का उपयोग कर रहा हूं विशेष देश के लिए।
देश का नाम और समय क्षेत्र मान प्राप्त करने के बाद, आप वर्तमान सत्र का समय क्षेत्र निर्धारित करने के लिए सत्र बदलें कमांड का उपयोग कर सकते हैं। उसके बाद आप उस देश का वर्तमान स्थानीय समय जानने के लिए Current_Timestamp प्राप्त कर सकते हैं . नीचे मैं स्टेप बाय स्टेप उदाहरण दे रहा हूं।
देश के नाम और उनके समय क्षेत्र की जांच करने के लिए पहले TZ_OFFSET फ़ंक्शन का उपयोग करके V$TIMEZONE_NAMES दृश्य को क्वेरी करें, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है:
SELECT DISTINCT tzname, TZ_OFFSET (tzname) FROM V$TIMEZONE_NAMES ORDER BY tzname;
आपको लगभग 577 पंक्तियाँ कुछ इस तरह मिलेंगी:
America/Mexico_City -05:00 America/Miquelon -02:00 America/Moncton -03:00 America/Monterrey -05:00 America/Montevideo -03:00 America/Montreal -04:00 America/Montserrat -04:00 America/Nassau -04:00 America/New_York -04:00
अब यदि आप जानना चाहते हैं कि न्यूयॉर्क में वर्तमान स्थानीय समय क्या है। फिर आप न्यू यॉर्क के टाइमज़ोन मान के साथ निम्नलिखित ऑल्टर सेशन कमांड चलाते हैं, जो -04:00 है। जैसा कि नीचे दिखाया गया है:
ALTER SESSION SET time_zone = '-04:00';
फिर न्यूयॉर्क के लिए वर्तमान स्थानीय समय प्राप्त करने के लिए नीचे के रूप में क्वेरी करें।
SELECT TO_CHAR (CURRENT_TIMESTAMP, 'dd-mon-yyyy HH:mi:ss PM') c_time FROM DUAL; C_TIME -------------------------------- 13-jun-2017 04:26:10 AM 1 row selected.
उसके बाद आपको टाइमज़ोन को लोकल पर सेट करना चाहिए। समयक्षेत्र को पुनर्स्थापित करने के लिए निम्न सत्र बदलें आदेश चलाएँ:
ALTER SESSION SET time_zone = LOCAL;
अब यदि आप ऊपर बताए अनुसार प्रश्न करेंगे तो आपको अपने देश का वर्तमान स्थानीय समय मिल जाएगा।
मैंने देश के नाम को पैरामीटर के रूप में पास करके किसी भी देश का स्थानीय समय प्राप्त करने के लिए पीएल/एसक्यूएल में एक संग्रहीत फ़ंक्शन भी बनाया है। लेकिन पैरामीटर देश का नाम V$TIMEZONE_NAMES दृश्य में देश के नामों की सूची से होना चाहिए। नीचे कार्य है:
CREATE OR REPLACE FUNCTION get_current_local_time (country_name IN VARCHAR2) RETURN VARCHAR2 IS CURSOR c_tz (p_country_name IN VARCHAR2) IS SELECT DISTINCT tzname, TZ_OFFSET (tzname) z_offset FROM V$TIMEZONE_NAMES WHERE UPPER (tzname) = UPPER (p_country_name) AND ROWNUM = 1; v_offset VARCHAR2 (100); vtime VARCHAR2 (100); BEGIN FOR c IN c_tz (country_name) LOOP v_offset := c.z_offset; END LOOP; EXECUTE IMMEDIATE 'Alter Session Set time_zone = ' || CHR (39) || v_offset || CHR (39); SELECT TO_CHAR (CURRENT_TIMESTAMP, 'dd-mon-yyyy HH:mi:ss PM') INTO vtime FROM DUAL; /* restore local time for current session*/ EXECUTE IMMEDIATE 'Alter Session Set time_zone = local'; RETURN (vtime); EXCEPTION WHEN OTHERS THEN RETURN ''; END; /
अब इसे नीचे दिखाए अनुसार उपयोग करें:
SELECT get_current_local_time ('America/New_York') FROM DUAL; C_TIME -------------------------------------------------------- 13-jun-2017 04:33:05 AM 1 row selected.