क्या MySQL एक संग्रहीत UTC समय को स्थानीय समयक्षेत्र में बदल सकता है?




timezone convert-tz (4)

क्या MySQL एक संग्रहीत यूटीसी समय को स्थानीय टाइमज़ोन में बदल सकता है: एड समय सीधे एक सामान्य चयन स्टेटमेंट में?

मान लें कि आपके पास टाइमस्टैम्प (UTC) के साथ कुछ डेटा है।

CREATE TABLE `SomeDateTable` (
  `id`    int(11) NOT NULL auto_increment,
  `value` float NOT NULL default '0',
  `date`  datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`id`)
)

फिर जब मैं

"select value, date from SomeDateTable";

मुझे निश्चित रूप से सभी तिथियां उनके संग्रहीत यूटीसी फॉर्म के रूप में मिलती हैं।

लेकिन यह कहते हैं कि मैं उन्हें एक और टाइमज़ोन (डीएसटी के साथ) में लेना चाहूंगा, तो क्या मैं कुछ जादू को चुनिंदा क्वेरी में जोड़ सकता हूं ताकि मुझे चयनित समयक्षेत्र में सभी तिथियां वापस मिल जाएं?

"select value, TIMEZONE(date, "Europe/Berlin") from SomeDateTable";

या क्या मुझे शीर्ष पर किसी अन्य परत में ऐसा करना चाहिए, जैसे कुछ php कोड में? (ऐसा लगता है कि अधिकांश लोगों ने इस समस्या को कैसे हल किया है)।

धन्यवाद जोहान

यदि आपकी MySQL स्थापना आपको CONVERT_TZ का उपयोग करने की अनुमति देती है तो यह एक बहुत ही स्वच्छ समाधान है, यह उदाहरण दिखाता है कि इसका उपयोग कैसे करना है।

SELECT CONVERT_TZ( '2010-01-01 12:00', 'UTC', 'Europe/Stockholm' )

हालाँकि मुझे नहीं पता कि यह एक अच्छा तरीका है क्योंकि कुछ MySQL स्थापना इस फ़ंक्शन को याद कर रही है, देखभाल के साथ उपयोग करें।


"अमेरिका / डेनवर" या "GMT" जैसे मानव-अनुकूल टाइमज़ोन नामों का उपयोग करने के लिए mysql पर्यावरण (जैसे सुपर एक्सेस की कमी के कारण) को कॉन्फ़िगर करने में असमर्थ लोगों के लिए, आप इस तरह के संख्यात्मक ऑफसेट के साथ फ़ंक्शन का उपयोग कर सकते हैं:

CONVERT_TZ(date,'+00:00','-07:00')

मुझे यकीन नहीं है कि DATETIME डेटा प्रकार पर क्या गणित किया जा सकता है, लेकिन यदि आप PHP का उपयोग कर रहे हैं, तो मैं पूर्णांक आधारित टाइमस्टैम्प का उपयोग करने की दृढ़ता से सलाह देता हूं। मूल रूप से, आप PHP के समय () फ़ंक्शन का उपयोग करके डेटाबेस में 4-बाइट पूर्णांक स्टोर कर सकते हैं। यह इस पर गणित को और अधिक सरल बनाता है।



select convert_tz(now(),@@session.time_zone,'+03:00')

केवल समय का उपयोग करने के लिए:

time(convert_tz(now(),@@session.time_zone,'+03:00'))




convert-tz