2011-01-15 16 views
5

मेरे पास एक ऐसा एप्लिकेशन है जहां मैं उपयोगकर्ता को टाइमज़ोन सेट करने की अनुमति देना चाहता हूं। जब उपयोगकर्ता एक अनुस्मारक प्रविष्टि बनाता है, तो प्रविष्टि यूटीसी में डीबी में संग्रहीत की जाएगी। लेकिन जब वह ऐप में कैलेंडर प्रविष्टि खोलता है, तो उसे अपने चयनित टाइमज़ोन में प्रविष्टि देखना चाहिए। मैं क्रोनिक का उपयोग कर रहा हूं लेकिन यह यहां बेकार है।रेल में टाइमज़ोन

before_filter :set_user_time_zone 
... 
def set_user_time_zone 
    Time.zone = current_user.timezone if user_signed_in? 
end 

इस के बाद, प्रविष्टियों अभी भी यूटीसी में, लेकिन समय के अंतर के साथ सहेजे जाते हैं:
मेरी ApplicationController.rb में, मैं निम्नलिखित स्ट्रिंग है। उदाहरण के लिए, मैंने टाइमज़ोन को "दिल्ली" के रूप में सेट किया है जो यूटीसी से +530 है। जब मैं "जनवरी, 16 - 12:15 पूर्वाह्न" के लिए कैलेंडर प्रविष्टि को सहेजना चाहता हूं - डेटाबेस "2011-01-15 18:45:19 यूटीसी" के साथ आबादी है - इसलिए वास्तविक समय से 5:30 घंटे पहले बचाना।
यूआई में भी मैं वर्तमान उपयोगकर्ता के टाइमज़ोन में प्रदर्शित समय के बजाय इस प्रविष्टि को देख रहा हूं।

मैं जानना चाहता हूं कि रेल में इस तरह की टाइमज़ोन सुविधाओं को संभालने के लिए सही तरीका क्या होना चाहिए।

+1

मैं अगर इस लिंक में मदद मिलेगी पता नहीं है, लेकिन यह अच्छा जानने-की-है: http://stackoverflow.com/questions/4529387/does-anyone -को-कैसे-उचित-से-उपयोगकर्ता-टाइमज़ोन-इन-रेल-2-3 – Zabba

उत्तर

8

डेटाबेस में आपको यूटीसी में समय और यूआई के लिए स्टोर करने की आवश्यकता है, आपको इसे उपयोगकर्ता के टाइमज़ोन में रूपांतरित करने की आवश्यकता है। रेल कंसोल में

उदाहरण:

Time.zone = "New Delhi"   #=> "New Delhi" 

Time.now      # => 2011-01-15 16:45:18 -0600 

Time.now.in_time_zone   # => Sun, 16 Jan 2011 04:15:26 IST +05:30 
+0

यह थ्रेड सुरक्षित नहीं है। (स्क्रैच करें। ऐसा लगता है कि रेल थ्रेड.current में इसे स्टोर करते हैं) –

संबंधित मुद्दे