2011-09-04 4 views
7

मुझे यह निर्धारित करने की आवश्यकता है कि वर्तमान संस्कृति/लोकेल am/pm time या 24-घंटे का उपयोग करने के लिए सेट है या नहीं।यह निर्धारित करने के लिए कि वर्तमान संस्कृति/लोकेल am/pm या 24-घंटे का समय उपयोग करता है या नहीं?

पहले तो मैंने सोचा कि मैं ऐसा कर सकता है:

bool time24Hour = Thread.CurrentThread.CurrentCulture.DateTimeFormat.AMDesignator == ""; 

लेकिन तब मैं इस सूत्र Get just the hour of day from DateTime using either 12 or 24 hour format as defined by the current culture जो संकेत को यह काम नहीं करेगा लगता है पर पिछले जवाब पर टिप्पणी पढ़ने के।

मुझे लगता है मैं एक मनमाना समय प्रारूप सकता है, और फिर परिणामों का विश्लेषण, लेकिन निश्चित रूप से वहाँ एक सरल तरीका है?

संपादित करें:

भी देखें मेरी नीचे टिप्पणी - मैं सिर्फ यह निर्धारित करने के दो पहले से फ़ॉर्मेट की निरंतर घंटे की सूची मैं का चयन करना चाहिए, वाली स्ट्रिंग में से एक और अनावश्यक contortions का एक बहुत से बचने के लिए आशा है कि जो चाहते हैं - मैं तो बस यह एक हां/नहीं उत्तर की आवश्यकता है कि यह एक am/pm संस्कृति है या 24 घंटे की संस्कृति है।

प्रोग्राम एक WinForms प्रोग्राम है, यदि यह किसी भी मदद की है।

+0

क्यों यह आप पर फर्क पड़ता है? –

+1

मुझे संस्कृति के आधार पर, "9 10 11 12 13 14 15 16 17" या "9 10 11 12 1 2 3 4 5" घंटों की दो पूर्व-जेनरेट और निरंतर सूचियों में से एक को चुनने की आवश्यकता है। मुझे उम्मीद है कि डेटटाइम और स्वरूपण और अन्य कई तरह के मतभेदों से गुजरना जरूरी नहीं है। – RenniePet

+0

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

उत्तर

9

कोशिश की जाँच करता है, तो DateTimeFormat.ShortTimePatternH शामिल हैं। यदि ऐसा होता है, तो सिस्टम 24 घंटे का समय

+0

धन्यवाद, यह उचित दृष्टिकोण की तरह दिखता है। लेकिन क्या यह सिर्फ "एच" के लिए परीक्षण करने के लिए और भी सही नहीं होगा? (या "एचएच", लेकिन यह अनावश्यक होगा।) – RenniePet

+0

एक अन्य बहुत ही मामूली बिंदु - मैं देख सकता हूं कि आपने WinForms को मेरे प्रश्न के लिए एक टैग के रूप में जोड़ा है, लेकिन मेरा प्रश्न नहीं है और आपका उत्तर प्रस्तुति प्रणाली से स्वतंत्र है? – RenniePet

+0

1) आप सही हैं, मैंने अपना जवाब संपादित किया 2) मैंने ऐसा इसलिए किया क्योंकि आपने कहा था कि आप इसे Winforms में कर रहे हैं। सुनिश्चित नहीं है कि सिल्वरलाइट और डब्ल्यूपीएफ के पास ऐसा करने का एक अलग तरीका है। –

2

का उपयोग कर रहा है, यदि मैं कर सकता हूं तो बस एक छोटा सा अतिरिक्त उपयोग कर रहा है। Dario_ramos द्वारा दिए गए उत्तर के आधार पर, मैंने इसे एक सहायक विधि परीक्षण के साथ एक विस्तार विधि में बदल दिया, जो मेरे सिस्टम (378 संस्कृतियों की जांच) पर गुजरता है।

public static class DateTimeExtensions 
{ 
    public static bool Is24Hrs(this CultureInfo cultureInfo) 
    { 
     return cultureInfo.DateTimeFormat.ShortTimePattern.Contains("H"); 
    } 
} 

[TestClass] 
public class DateTimeExtensionTests 
{ 
    [TestMethod] 
    public void Unit_Can_Determine_If_Culture_Uses_24HrTime() 
    { 
     var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures); 
     foreach (var cultureInfo in cultures) 
     { 
      Thread.CurrentThread.CurrentCulture = cultureInfo; 
      var datetime = new DateTime(2000, 1, 1, 23, 0, 0); 
      var formatted = datetime.ToString("t"); 
      var is24Hrs = formatted.Contains("23"); 
      Assert.AreEqual(is24Hrs, cultureInfo.Is24Hrs()); 
     } 
    } 
} 
संबंधित मुद्दे

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