MySQL CONVERT_TZ()




timezone convert-tz (2)

सभी को नमस्कार (एक MySQL शुरुआत से)

मैं एक डेटाबेस स्थापित करने की कोशिश कर रहा हूं जो उपयोगकर्ताओं द्वारा निर्दिष्ट दैनिक चेतावनी समय संग्रहीत करता है। उदाहरण के लिए, उपयोगकर्ता प्रत्येक चेतावनी को हर दिन 7:00 पूर्वाह्न और 7:30 पूर्वाह्न के बीच पूरा होने पर अलर्ट प्राप्त करना चाहता है। इसे लागू करने की कोशिश में, मुझे डेलाइट सेविंग टाइम को समायोजित करने की आवश्यकता है। मेरा प्रयास समाधान यहां दिया गया है:

  1. उपयोगकर्ताओं को स्थानीय समय क्षेत्र (लंबे रूप में, उदाहरण के लिए "यूएस / पूर्वी") जानकारी एक तालिका में (userInfo कहें), और किसी अन्य तालिका में अलार्म टाइम्स (उपयोगकर्ता अलार्म कहते हैं) को स्टोर करें।
  2. उपयोगकर्ता अलार्म टेबल से पूछताछ करते समय, CONVERT_TZ(UTC_TIME(), 'UTC', userInfo.tz) माध्यम से userInfo तालिका में संग्रहीत tz कॉलम द्वारा निर्दिष्ट अनुसार स्थानीय समय में यूटीसी समय को उपयोगकर्ता में परिवर्तित करें।

प्रश्न 1. मेरी समझ से, समय क्षेत्र नाम (जैसे यूएस / पूर्वी) को निर्दिष्ट करना डेलाइट सेविंग टाइम को ध्यान में रखना चाहिए । उदाहरण के लिए, 1 जनवरी को CONVERT_TZ('00:00:00', 'UTC', 'US/EASTERN') को कॉल करना चाहिए' 1 9: 00: 00 ', लेकिन 1 जुलाई को कॉल को '20: 00: 00 '। क्या मैं सही हूँ?

प्रश्न 2. यदि क्यू 1 सही है, तो क्या मुझे समय क्षेत्र यूटीसी ऑफ़सेट को अद्यतित रखने के लिए लगातार MySQL की टाइम ज़ोन तालिका अपडेट करने की आवश्यकता है?

प्रश्न 3. MySQL दस्तावेज़ में दिया गया नमूना SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET') मेरे सर्वर पर चलने पर " NULL " उत्पन्न करता है। क्या यह समय क्षेत्र तालिका सेट अप नहीं होने के कारण हो सकता है? मैं इसे कैसे देख सकता हूं?


अगर यह शून्य हो जाता है तो टीजेड टेबल स्थापित नहीं किए गए हैं:

SELECT CONVERT_TZ(now(),'US/Eastern','US/Central');

यदि आपके पास समय क्षेत्र तालिका सेट अप नहीं है तो आप उपयोगकर्ता तालिका में घंटे ऑफसेट अपडेट कर सकते हैं और फिर ऐसा कर सकते हैं:

select utc_timezone() - interval user_timezone_offset_in_hours hour
from userinfo a
where user_id = 999;

हालांकि आपको उपयोगकर्ता के समय क्षेत्र को अपडेट करने के लिए अभी भी एक तरीका चाहिए।

यदि आप इसे वेब एप्लिकेशन के लिए लिख रहे हैं तो आप जावास्क्रिप्ट के माध्यम से समय क्षेत्र प्राप्त कर सकते हैं, यहां एक article जो वर्णन करता है कि कैसे (इसने कोशिश नहीं की है लेकिन ऐसा लगता है कि यह काम करेगा)।

उपरोक्त 'अंतराल' के संबंध में एक स्पष्टीकरण ...

MySQL में अधिक चाल संरचनाओं में से एक INTERVAL कीवर्ड का उपयोग है, उदाहरण के द्वारा सबसे अच्छा दिखाया गया है (संख्यात्मक मान अभिव्यक्ति या फ़ील्ड मान हो सकता है)

select now() today, now() - interval 1 day yesterday;
+---------------------+---------------------+
| today               | yesterday           |
+---------------------+---------------------+
| 2011-05-26 13:20:55 | 2011-05-25 13:20:55 |
+---------------------+---------------------+

आप उन्हें जोड़ सकते हैं और वैसे भी उन्हें घटा सकते हैं, यही कारण है कि मैं कभी भी दिनांक / समय जोड़ने / घटाना / कन्वर्ट फ़ंक्शंस से परेशान नहीं हूं

select now() a, now() - interval 1 day + interval 4 hour + interval 8 minute b;
+---------------------+---------------------+
| a                   | b                   |
+---------------------+---------------------+
| 2011-05-26 13:24:16 | 2011-05-25 17:32:16 |
+---------------------+---------------------+

आप नकारात्मक संख्याओं का उपयोग कर सकते हैं (ऋणात्मक समय क्षेत्र ऑफसेट के लिए अच्छा होना चाहिए) ये वही हैं:

select now() - interval 1 month a, now() + interval -1 month b;
+---------------------+---------------------+
| a                   | b                   |
+---------------------+---------------------+
| 2011-04-26 13:38:05 | 2011-04-26 13:38:05 |
+---------------------+---------------------+

प्रश्न 1: हां, CONVERT_TZ आपके लिए डेलाइट बचत समय लेता है। यह जानकारी और समय जो प्रत्येक समय क्षेत्र के लिए डीएसटी शुरू / समाप्त होता है, समय_ज़ोन_ * तालिकाओं में संग्रहीत होता है।

प्रश्न 2: हां, जैसा कि mysql दस्तावेज़ों में बताया गया है, समय क्षेत्र की जानकारी प्रत्येक क्षेत्र की राजनीति में बदल जाती है। प्रत्येक बार जब कोई परिवर्तन होता है तो आपको time_zone_ * तालिकाओं को अपडेट करना होगा। कभी-कभी आईटी होने लगता है, यह उनमें से एक है।

प्रश्न 3: ये 5 टाइमज़ोन टेबल हैं, उन्हें यह देखने के लिए पूछें कि उनके पास उनमें कुछ है या नहीं:

select * from mysql.time_zone_transition_type;
select * from mysql.time_zone_transition;
select * from mysql.time_zone_name;
select * from mysql.time_zone_leap_second;
select * from mysql.time_zone;




convert-tz