2009-08-24 15 views
39

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

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

मुझे यकीन नहीं है कि मुझे क्या चाहिए। मेरा डेटाबेस समय भंडारण क्या होना चाहिए? मैंने कहीं पढ़ा है कि इसे यूटीसी के रूप में संग्रहीत किया जाना चाहिए। ऐसा करने के लिए मैं अपना डेटाबेस कैसे स्थापित करूं? साथ ही, मैं एक साझा होस्टिंग साइट पर रहूंगा, इसलिए इसे इस तरह से सेट करना होगा कि मैं इसे कर सकता हूं (शायद वेब कॉन्फिग के माध्यम से?)।

अगला, मुझे सभी टाइमज़ोन की एक सूची की आवश्यकता होगी जैसे कि एक HTML सहायक या नियमित HTML। मैं वास्तव में एक बनाना नहीं चाहता।

फिर, जैसे मैंने कहा, मुझे एक ट्यूटोरियल चाहिए जो मुझे दिखा रहा है कि क्या करना है। मुझे लगता है कि वह उस समय से सामान जोड़ रहा है और घटा रहा है, लेकिन मैं गलत हो सकता था।

उत्तर

36

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

जब आप अपनी साइट पर डेटाबेस से एक तिथि प्रदर्शित करने के लिए की जरूरत है, तो आप ऐसा कर सकते हैं:

DateTime stamp = /* get datetime from the database here, make sure you 
        use the constructor that allows you to specify the 
        DateTimeKind as UTC. */ 

//E.g. 
//DateTime stamp = new DateTime(2009, 12, 12, 12, 12, 12, DateTimeKind.Utc); 

timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(" /* users time zone here */"); 
var convertedTime = TimeZoneInfo.ConvertTime(stamp, timeZoneInfo); 

//Print out the date and time 
//Console.WriteLine(convertedTime.ToString("yyyy-MM-dd HH-mm-ss")); 

समयक्षेत्र की सूची, नेट में पहले से ही उपलब्ध है जिससे आप this post on how to enumerate them देख सकते हैं। एएसपी.NET एमवीसी के लिए, समय को प्रिंट करने के बजाय, आप परिवर्तित मॉडल को अपने मॉडल वर्ग की संपत्ति में असाइन करना चाहते हैं ताकि आपका व्यू इसे प्रदर्शित करने के लिए उपयोग कर सके।

+0

हाय धन्यवाद मैं इसे लागू करने की कोशिश करना शुरू कर दूंगा। मेरे पास एक और अज्ञात है। क्या उपयोगकर्ता मेरी साइट पर आता है और मैं डीबी के माध्यम से जाना चाहता हूं और देख सकता हूं कि वे अपने टाइमज़ोन पर कौन से संदेश प्रदर्शित कर सकते हैं। तो क्या मैं पहले यह पता लगाऊंगा कि उनका समय क्या है और फिर इसे यूटीसी में परिवर्तित कर दें? तो इसके साथ कहां करें? तो आपके उदाहरण में क्या कर रहे हैं इसके विपरीत? – chobo2

+0

ठीक है, शुरुआत में आपने उपयोगकर्ता को अपना टाइमज़ोन सेट करने की अनुमति देने का उल्लेख किया था। हालांकि, जावास्क्रिप्ट के माध्यम से उपयोगकर्ता के टाइमज़ोन की खोज करने के कई तरीके हैं, उदाहरण के लिए आप अधिक जानकारी के लिए स्टैक ओवरफ्लो खोज सकते हैं, उदाहरण के लिए यह पोस्ट: http://stackoverflow.com/questions/1017053/finding-the-clients-timezone- और-संस्कृति-माध्यम-वेब-सेवा – womp

+0

मैं उनके साथ अपना टाइमज़ोन चुनने के साथ ठीक हूं और वास्तव में जावास्क्रिप्ट को अभी देखना नहीं चाहता हूं। मैं बस इतना कह रहा हूं कि मैं अपने डीबी में विशिष्ट तिथियों की तलाश कैसे करूंगा? यूटीएफ में वापस बदलने की कोशिश कर? – chobo2

2

सबसे पहले, दिनांक समय दस्तावेज़ के लिए एमएसडीएन जांचें और इसे पढ़ें। Here is an article डेटटाइम के साथ सर्वोत्तम अभ्यासों पर जो टाइमज़ोन और यूटीसी को कवर करता है।

हां, आपको अपने डेटाबेस में यूटीसी स्टोर करना चाहिए। यूटीसी के रूप में डेटटाइम संग्रहीत करने से आप अपने चुने हुए टाइमज़ोन के आधार पर उपयोगकर्ताओं को (और से) उपयोगकर्ताओं का अनुवाद करने की अनुमति देंगे। आप सही रास्ते पर हैं!

9

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

डेटाबेस स्तर पर आपको वास्तव में कुछ भी करने की ज़रूरत नहीं है। बस एक सामान्य डेटाटाइम कॉलम बनाएं, लेकिन सुनिश्चित करें कि यह स्पष्ट रूप से दस्तावेज है कि कॉलम को यूटीसी माना जाता है।

मैं ईमानदार रहूंगा, asp.net मेरी विशेषज्ञता नहीं है, लेकिन मुझे लगता है कि आप किसी भी तरह से क्लाइंट अनुरोध से टाइमज़ोन प्राप्त कर सकते हैं। दरअसल, क्योंकि डेलाइट सेविंग टाइम नियम इस क्षेत्र के आधार पर बहुत अस्पष्ट हो सकते हैं, यूटीसी ऑफ़सेट की गणना करने वाले जावा स्क्रिप्ट का उपयोग करना बेहतर हो सकता है और रूपांतरण करने के लिए इसका उपयोग किया जा सकता है। 2005 के ऊर्जा नीति अधिनियम के बाद भी डीएसटी नियमों के कुछ अपवाद हैं जो सर्वर पक्ष से निपटने के लिए कठिन होंगे। हालांकि, मुझे लगता है कि आप क्लाइंट को अपना समय निर्धारित करने की अनुमति देने का विचार कर रहे हैं ज्यादातर मामलों में अच्छी तरह से काम करेगा।

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