2009-02-14 18 views
6

मैं एक साइट के उपयोगकर्ताओं, कैलेंडर प्रविष्टियों को जोड़ने के मुख्य पृष्ठ पर सभी उपयोगकर्ताओं फिर कुछ पाठ के साथ इन प्रविष्टियों को देख सकते हैं कह रही है कितनी देर तक यह इन प्रविष्टियों को उदाहरण के लिए वर्तमान हैं देता है कि पर काम कर रहा हूँASP.Net समय स्थानीयकरण

एंट्री 1: 5 मिनट
एंट्री 2: 7 घंटे
एंट्री 3: 4 दिनों

समस्या मैं आ रही है कि हर कोई विभिन्न समय क्षेत्रों में हो सकता है। मैंने फैसला किया है कि मैं जीएमटी में सभी समय/तिथियां स्टोर करना चाहता हूं।

जब मैं कोई उपयोगकर्ता कैलेंडर प्रविष्टि सबमिट करता हूं तो 1/1/2009 10:30 पूर्वाह्न के लिए कहता है तो मुझे यह पता लगाने की आवश्यकता है कि यह दिनांक समय के लिए जीएमटी में भंडारण के लिए क्या है। क्या यह जानने का कोई तरीका है कि उपयोगकर्ता स्थानीय टाइमज़ोन/समय क्या है, इसलिए मैं इसे रूपांतरण के लिए सर्वर समय (जीएमटी) से तुलना कर सकता हूं?

मुझे उम्मीद है कि यह समझ में आता है। मुझे उम्मीद है कि मैं उपयोगकर्ता से पूछने के बिना ऐसा कर सकता हूं कि वे किस समय में हैं, या उपयोगकर्ता को जीएमटी में सभी डेटाटाइम दर्ज करने के लिए मजबूर कर रहे हैं।

उत्तर

5

सर्वर पर भेजने से पहले डेटाटाइम को जीएमटी क्लाइंट साइड (जावास्क्रिप्ट में यदि यह एक वेब ऐप है) में कनवर्ट करें। सर्वर को केवल जीएमटी के साथ काम करने दें (मैं यूटीसी कहूंगा)। तिथियों/समय को प्रदर्शित करने के लिए वही बात। जीएमटी/यूटीसी को क्लाइंट को भेजें, और जेएस को स्थानीयकृत करें। यह मेरी राय में एकमात्र पूरी तरह से सुरक्षित तरीका है, क्योंकि आप यह समझने के लिए उपयोगकर्ताओं को ऑपरेटिंग सिस्टम तक पहुंचने देते हैं कि समय क्या होना चाहिए।

कारण के अन्य दृष्टिकोण हैं, और यदि आपको केवल यह जानने की आवश्यकता है कि ग्राहक का समय क्या है, तो आप इसे केवल ऑफसेट प्राप्त कर सकते हैं (जेएस आदि के माध्यम से पुनर्प्राप्त किया जा सकता है)। लेकिन यदि आपको ऐतिहासिक और भविष्य की तारीख/समय के लिए अलग-अलग स्थानों में सटीक तिथियों/समय की आवश्यकता है तो आप क्लाइंट को इसे संभालने दें।

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

var tzOffset = new Date().getTimezoneOffset(); // Minutes 

तो फिर तुम एक छिपी हुई फ़ील्ड या अन्य उपयुक्त दृष्टिकोण का उपयोग करके सर्वर पर भेजने की जरूरत है:

1

हैं तो आपको (स्पष्ट उपयोगकर्ता पसंद के अलावा) समय क्षेत्र ब्राउज़र से ऑफसेट प्राप्त करने के लिए है।

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

1

बैठाना किसी का कोई दिलचस्पी मैं एक साइट है कि,

http://www.tellingmachine.com/post/2008/05/Rendering-ASPNET-UTC-time-as-local-time-of-the-browsers-time-zone.aspx

+1

अच्छा लेख कार्रवाई में इस का एक अच्छा काम कर रहे उदाहरण देता है, हालांकि एक बहुत अधिक कोड की तुलना में मैं एक ही बात को सक्षम करने का उपयोग किया है पाया (का उपयोग करके यूनिक्स समय)। –

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