मेरे पास कॉलम है जो केवल समय स्टोर करता है। मैं इसे डेटाइम में और फिर एक विशिष्ट टाइमज़ोन में बदलना चाहता हूं। जब मैं इसे केवल विशेषता का उपयोग करके कंसोल पर करता हूं, तो यह सही रूपांतरण मान दिखाता है। लेकिन जब मैं इसे क्वेरी में उपयोग करता हूं तो क्वेरी UTC में वर्तमान समय दिखाता है। मान लीजिए कि मेरे पास केंद्रीय समय में "05:15" समय है। अब जब मैं इस समय के 30 मिनट के प्लस और माइनस के अंतराल के लिए रिकॉर्ड प्राप्त करना चाहता हूं, तो मैं निम्नलिखित कार्य करता हूं:
day = Time.now
# departure_time_from _db below is the name of column in table which store time
departure = departure_time_from _db.change(:day => date.day, :month => date.month, :year => date.year)
departure = departure.in_time_zone("Central Time (US & Canada)")
जब मैं कंसोल पर कोड से ऊपर निष्पादित करता हूं और मूल्य देखता हूं, तो यह सही रूपांतरित मूल्य दर्शाता है। लेकिन जब मैं इस चर का उपयोग क्वेरी के नीचे करता हूं, तो प्रस्थान समय के बजाय वर्तमान समय का उपयोग किया जाता है।
Model.where("column_name > ? and "column_name < ?, departure - 30.minutes, departure + 30.minutes)
उपरोक्त क्वेरी में उपयोग किया जाने वाला समय वह समय होना चाहिए जो मैं चाहता हूं यानी केंद्रीय समय क्षेत्र, लेकिन क्वेरी आउटपुट में, यह यूटीसी का उपयोग किया जा रहा है।
कृपया मुझे बताएं कि मैं क्या याद कर रहा हूं।
उत्तर:
उत्तर № 1 के लिए 1यह नहीं होना चाहिए कि क्वेरी किस समय क्षेत्र में उपयोग करती है where
जब तक यह उसी समय का प्रतिनिधित्व करता है तब तक रुकें। जब आप रेल से अपने क्वेरी आउटपुट में देख रहे हैं, तो यह संभव है कि यूटीसी माणिक के बराबर हो। DateTime
वस्तु को पारित किया जा रहा है where
बयान। तो अगर departure
आपके रूबी कोड में दोपहर 12:00 (UTC -6) है, फिर SQL क्वेरी में दिखाया गया समय 18:00 होगा, जो दोपहर CST से मेल खाता है।