2010-02-15 25 views
5

पर एसक्यूएल डेटाबेस में संग्रहीत यूटीसी समय से स्थानीय समय प्रदर्शित करें मुझे कई बार यूटीसी प्रारूप में एसक्यूएल डेटाबेस में सहेजा गया है। मैं उन समय को ग्रिडव्यू पर प्रदर्शित कर रहा हूं, हालांकि वे अभी भी यूटीसी प्रारूप हैं। मैं उन्हें स्थानीय समय के क्लाइंट के ब्राउज़र में कनवर्ट करना चाहता हूं। समस्या यह है कि हालांकि मैं टाइमज़ोन ऑफ़सेट प्राप्त कर सकता हूं जो केवल वर्तमान दिनांक/समय के लिए है। भविष्य में उन तिथियों में से कुछ भविष्य में डेलाइट बचत समय के दौरान होने पर समाप्त हो सकता है कि ऑफसेट बदल सकता है। मैं वेब प्रोग्रामिंग के लिए अपेक्षाकृत नया हूं लेकिन ऐसा लगता है कि मुझे कुछ जावास्क्रिप्ट चलाने की ज़रूरत है क्योंकि प्रत्येक प्रविष्टि ग्रिडव्यू से जुड़ी होती है जो किसी भी तरह से सी # डेटाटाइमसेट ऑब्जेक्ट लेती है और इसे स्थानीय समय में परिवर्तित करती है। या शायद यह संभव नहीं है?एएसपीनेट एप

उत्तर

8

यदि आपके पास TimeZoneInfo ऑब्जेक्ट है तो यह सर्वर पक्ष पर किया जा सकता है। आप स्थिर ConvertTimeFromUtc() विधि का उपयोग कर सकते हैं।

सी # में:

DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(myDbDateTime, myTimeZoneInfo); 

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

अद्यतन

कई मुद्दे हैं जो जब अपने आप उपयोगकर्ता के समय क्षेत्र निर्धारित करने के लिए कोशिश कर रहा प्रतीत होती हैं।

  1. उपयोगकर्ता एजेंट द्वारा सर्वर को टाइमज़ोन प्रदान नहीं किया जाता है।
  2. जावास्क्रिप्ट टाइमज़ोन तक पहुंच प्रदान नहीं करता है (कुछ ब्राउज़रों को छोड़कर, कभी-कभी)।

जावास्क्रिप्ट समारोह getTimezoneOffset() शुरू में एक अच्छा विचार की तरह लग सकता है, लेकिन जब से ऑफसेट एक ही साथ कई समय क्षेत्रों देखते हैं, यह एक अनूठा मूल्य नहीं है। इन गैर-अद्वितीय क्षेत्रों में से कई के बीच का अंतर डेलाइट सेविंग टाइम का कार्यान्वयन है।

उदाहरण: इंडियाना डीएसटी का सम्मान नहीं करता है। इसलिए, आधा साल के लिए उनके ऑफसेट पूर्वी समय से मेल खाता है, जबकि दूसरा आधा उनका ऑफसेट केंद्रीय समय के बराबर है।

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

ओपन http://jsbin.com/onulo3 निरीक्षण करने के लिए:
IE8: सूर्य 14 फ़र, 22:12:22 ईएसटी 2010
क्रोम: सूर्य फ़र, 14 2010 22:12:22 GMT-0500 (पूर्वी मानक समय)
सफारी: सूर्य फ़र, 14 2010 22:12:22 GMT-0500 (पूर्वी मानक समय)
फ़ायरफ़ॉक्स: सूर्य फ़र, 14 2010 22:12:22 GMT-0500 (पूर्वी मानक टी ime)

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

+0

मैं ऐसा करने की उम्मीद कर रहा हूं जहां उपयोगकर्ता को टाइमज़ोन निर्दिष्ट करने की आवश्यकता नहीं है और मैं केवल समय क्षेत्र प्राप्त कर सकता हूं अपने ब्राउज़र से – JonF

+0

हमने हाल ही में एक परियोजना पर ऐसा कुछ समय बिताया है। मैं अपने उत्तर में विवरण जोड़ूंगा, लेकिन लघु संस्करण यह है: इसे विश्वसनीय रूप से नहीं किया जा सकता है। – Joel

-2

यहां परिवर्तित करने के दो तरीके हैं।

रास्ता # 1: आप में datetime है, तो सेकंड के बाद से-युग प्रारूप, बस की तरह कुछ का उपयोग करें:

var d=new Date(seconds_since_epoch); 
document.write(d.toString()); 

मार्ग # 2: आप केवल वर्ष, माह, दिन, घंटा है, तो मिनट, और सेकंड UTC समय में, का उपयोग करें:

var d=new Date(yyyy,mo-1,dd,hh,mi,ss); // in JavaScript, January is month 0 
document.write(d.toString()); 
1

मैंने पाया "इंडियाना डेलाइट सेविंग टाइम" पर निम्नलिखित: http://www.timetemperature.com/tzus/indiana_time_zone.shtml

फिलहाल, 1/18/2010, एक माइक्रोसॉफ्ट सिस्टम लाइब्रेरी कॉल TimeZoneInfo.ConvertTimeFromUtc इस व्यवहार को प्रतिबिंबित करने के लिए प्रतीत होता है, मैं जांच रहा हूं ..