2011-05-23 6 views
12

मुझे अपने समय क्षेत्र के आधार पर उपयोगकर्ता के समय में अपना सर्वर समय बदलने की जरूरत है।क्या स्प्रिंग एमवीसी में एक HttpServletRequest ऑब्जेक्ट से उपयोगकर्ता का समय क्षेत्र प्राप्त करने का कोई और तरीका है?

क्या यह अपना टाइमज़ोन जानने का सबसे अच्छा तरीका है - HttpServletRequest ऑब्जेक्ट का उपयोग करके?

Locale clientLocale = request.getLocale(); 
Calendar calendar = Calendar.getInstance(clientLocale); 
TimeZone clientTimeZone = calendar.getTimeZone(); 

उत्तर

14

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

दो अन्य संभावित दृष्टिकोण:

  • उपयोग GeoIP ग्राहक के आईपी पर उनके स्थान पर एक चाकू है, और (TZ से) को देखने के लिए एक करीबी समय क्षेत्र
  • उपयोग क्लाइंट साइड जावास्क्रिप्ट गणना करने के लिए उनके यूटीसी से ऑफसेट (लोकलटाइम से यूटीसी घटाएं), फिर उस ऑफसेट से मेल खाने वाले टाइमज़ोन देखें (यह बहुत समय तक नहीं होगा क्योंकि कई टाइमज़ोन +11 घंटे हैं। आप उपरोक्त के साथ गठबंधन करने में सक्षम हो सकते हैं)।

इस के लिए कोई वास्तविक अच्छा समाधान नहीं है - यही कारण है कि अधिकांश साइटें उपयोगकर्ता के टाइमज़ोन के लिए पूछेंगी, या एक सापेक्ष प्रारूप में प्रदर्शित तिथियां (उदा। 5 घंटे पहले)।

3

अपने ग्राहक को एक ड्रॉपडाउन बॉक्स प्रदान करें जहां वह अपना सही समय क्षेत्र दर्ज कर सकता है। और डिफ़ॉल्ट रूप से लोकेल से निर्धारित एक का उपयोग करें।


वैसे भी: W3C अपने W3C वेब अंतर्राष्ट्रीयकरण पूछे जाने वाले प्रश्न में यह सवाल है: Is it a good idea to use the HTTP Accept-Language header to determine the locale of the user?

+0

डब्ल्यू 3 सी एफएक्यू –

+1

के लिए +1 ** टाइमज़ोन और भाषाएं स्वतंत्र हैं। ** रूस में 9 टाइमज़ोन हैं, जिनका उपयोग 'ru_RU' के लिए किया जाना चाहिए? जापान में रहने वाले लोग अपने लोकेल के साथ रहने वाले लोगों को अमेरिकी अंग्रेजी में वेबपृष्ठों और जेएसटी – user454322

+0

@ उपयोगकर्ता 454322 में समय देखने के लिए 'en_US' पर सेट करने की उम्मीद है: यही कारण है कि यह केवल डिफ़ॉल्ट मान है और उपयोगकर्ता उन्हें बदल सकता है। दूसरी ओर, यह कई स्थानों के लिए सही काम करेगा। – Ralph

12

आप इसे HttpServletRequest से नहीं मिल सकता है। जानकारी नहीं है।

var offset = new Date().getTimezoneOffset(); 
// ... 

आप के रूप में (AJAX) पैरामीटर सर्वर से वापस भेजने के लिए इसका उपयोग कर सकते हैं या प्रदान की गई एचटीएमएल पर परिवर्तनों को लागू करने:

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

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

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