2012-07-20 27 views
12

मेरे पास एक asp.net-mvc वेबसाइट है जिसे मैंने लिया और वहां एक पृष्ठ पृष्ठ है जहां लोग जानकारी और समय (स्थानीय टाइमज़ोन समेत) दर्ज करते हैं। डेटाबेस एक प्रारंभ समय, एक अंत समय और एक समय क्षेत्र जारी है क्योंकि यह मेरे लिए थोड़ा सा झटकेदार लगता है। यहां पहुंचने के लिए कोड सूची चुनने के लिए है से:मेरे डीबी में टाइमज़ोन जानकारी स्टोर करने का सबसे अच्छा तरीका क्या है?

static private IEnumerable<SelectListItem> GetTimeZones(string selected) 
    { 
     var timeZoneNames = TimeZoneInfo.GetSystemTimeZones() 
      .Where(tz => tz.DisplayName.Contains("London") 
         || tz.DisplayName.Contains("Hong Kong") 
         || tz.DisplayName.Contains("Mumbai") 
         || tz.DisplayName.Contains("Eastern Time")) 
      .ConvertAll(tz => tz.DisplayName).ToList(); 

     var items = new List<SelectListItem>(); 
     foreach (var item in timeZoneNames) 
     { 
      var slItem = new SelectListItem(); 
      slItem.Text = item; 
      slItem.Value = item; 
      slItem.Selected = item == selected; 
      items.Add(slItem); 
     } 

     return items; 
    } 

तो अपने बस संपूर्ण स्ट्रिंग कि TimeZoneInfo.GetSystemTimeZones()

वहाँ इस दृष्टिकोण के साथ किसी भी खामियां हैं से दिया जाता है भंडारण? मैं थोड़ा चिंतित हूं reading here कि यह स्थानीय रूप से मशीन से आता है जैसे विभिन्न मशीनों की अलग-अलग सेटिंग्स होती हैं। इसके अलावा, यह पता लगाने की कोशिश कर रहा है कि क्या सब कुछ यूटीसी या जीएमटी, आदि के रूप में सूचीबद्ध है। । कोई बेहतर सुझाव? उदाहरण के लिए, क्या मुझे वेबसाइट पर यूटीसी में रूपांतरण करना चाहिए और डेटाबेस में हर समय सामान्यीकृत करना चाहिए?

+2

SQL सर्वर का कौन सा संस्करण? एसक्यूएल सर्वर 2008 ने ['DATETIMEOFFSET'] पेश किया [http://msdn.microsoft.com/en-us/library/bb630289 (v = sql.100) .aspx)। मुझे अभी तक इसका उपयोग नहीं मिला है (मैं एक बार उपयोगकर्ता के समय क्षेत्र को स्टोर करता हूं, तारीख को यूटीसी के रूप में संग्रहीत करता हूं, और प्रति उपयोगकर्ता समायोजित करता हूं), लेकिन अन्य दावा करते हैं कि इसका उपयोग इस उद्देश्य के लिए किया जा सकता है। –

+0

डीबी में यूटीसी के रूप में दिनांक समय संग्रहीत करने के लिए एक नीचे की तरफ है। डीबीटी पर डीएसटी के लिए आप कैसे खाते हैं? टाइम ज़ोन और डीएसटी के संबंध में स्थानीय समय पर डेटटाइम या डेटटाइम 2 को कनवर्ट करने का कोई तरीका नहीं है। यदि आप ऑफसेट पास करते हैं, तो आप अभी भी एक दिन डीएसटी में होने के कारण बंद हो सकते हैं और एक नहीं। उदाहरण 3/10/2012 2:00:00 ईएसटी 3/09/2012 20:00:00 यूटीसी है लेकिन 3/13/2012 2:00:00 ईएसटी 3/12/2012 19:00:00 यूटीसी है। मूल रूप से -4 और -5 का ऑफसेट। तो यूटीसी को स्थानीय में बदलने के लिए आप अपने एसपी -4 या -5 में किस ऑफ़सेट में जाते हैं? किसी भी तरह से गलत है। – aBetterGamer

उत्तर

19

आपको आईडी को TimeZoneInfo.Id द्वारा वापस स्टोर करना चाहिए। यह पहचानकर्ता है - स्ट्रिंग जो के लिए है समय क्षेत्र की पहचान करें। प्रदर्शन नाम का उपयोग करना वास्तव में एक बुरा विचार है, क्योंकि यह संस्कृति द्वारा भिन्न हो सकता है और स्थिर होने की संभावना कम है।

फिर आप आईडी से ज़ोन पुनर्प्राप्त करने के लिए TimeZoneInfo.FindSystemTimeZoneById का उपयोग कर सकते हैं।

मान लीजिए कि मैं समय क्षेत्र हैंडलिंग के लिए TZDB पसंद करता हूं, लेकिन यह एक अलग मामला है :)

+0

क्या आप टीजेडडीबी पर कुछ और प्रकाश डाल सकते हैं और आप इसे क्यों पसंद करते हैं? –

+0

@ जोन स्कीट - बस स्पष्ट करने के लिए, ऐसा लगता है कि आईडी संपत्ति भी एक स्ट्रिंग है (जैसे "पूर्वी मानक समय")। । वह क्षेत्र है जिसे आप सुझाव दे रहे हैं कि मैं स्टोर करता हूं? – leora

+0

@leora - वह प्रलेखन से जुड़ा हुआ है, इसलिए हाँ, वह क्षेत्र है जिसका आपको उपयोग करना चाहिए। –

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

  • कोई संबंधित समस्या नहीं^_^