2011-09-04 14 views
7

Geçerli kültür/yerel ayarın, am/pm saatini veya 24 saatlik süreyi kullanıp kullanmayacağını belirlemeliyim.Geçerli kültür/yerel ayarın am/pm veya 24 saatlik süreyi kullanıp kullanmadığı nasıl belirlenir?

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

Ama sonra bu işe yaramaz ima görünüyor bu konuya Get just the hour of day from DateTime using either 12 or 24 hour format as defined by the current culture son cevap yorumları okumak:

İlk başta bunu yapabileceğimi düşündüm.

Rasgele bir süreyi biçimlendirebilir ve sonuçları analiz edebilirim, ama kesinlikle daha basit bir yol var mı?

DÜZENLEME:

bakınız aşağıda da benim yorum - Ben sadece seçmelidir saat listelerini içeren iki önceden biçimlendirilmiş sabit dizeleri bir ve gereksiz kontorsiyonlann bir sürü önlemek için umut olduğunu belirlemek istiyorum - Sadece Bunun bir am/pm kültürü veya 24 saat kültürü olup olmadığı konusunda evet/hayır cevabına ihtiyacınız var.

Program, herhangi bir yardıma sahipse, bir WinForms programıdır.

+0

Neden sizin için önemli? –

+1

Önceden oluşturulmuş ve sabit iki saatten birini seçmem gerekiyor: "910 11 12 13 14 15 16 17" veya "9 10 11 12 1 2 3 4 5", kültüre bağlı olarak. Ben DateTime ve biçimlendirme ve benzeri ile ilgili birçok çarpıtma geçmek için gerekli değildir umuyoruz. – RenniePet

+0

İlk olarak, sorunuzu bu bilgileri içerecek şekilde düzenlemelisiniz. İkincisi, Windows Forms kullanıyor musunuz? Web formları? Silverlight? –

cevap

9

DateTimeFormat.ShortTimePattern'un H içerip içermediğini kontrol etmeyi deneyin. Bunu yaparsa, sistem 24 saat süreyle

+0

Teşekkürler, bu doğru yaklaşıma benziyor. Ama sadece "H" yi test etmek daha doğru olmaz mıydı? (Ya da "HH", ama bu gereksiz olurdu.) – RenniePet

+0

Bir başka çok küçük nokta - WinForms'u sorgum için bir etiket olarak eklediğinizi görebiliyorum, fakat kullandığım sunum sisteminden bağımsız olarak sorum ve cevabım değil mi? – RenniePet

+0

1) Haklısınız, cevabımı düzenledim 2) Bunu sadece Winforms'ta yaptığınızı söylediğiniz için yaptım. Silverlight ve WPF'nin bunu yapmanın farklı bir yolu olup olmadığından emin değil. –

2

kullanıyorsa, yalnızca küçük bir ekleme yapabilirim. Dario_ramos'un cevabına dayanarak, bunu sistemime geçen bir destek birimi testiyle bir uzantı yöntemine dönüştürdüm (378 kültürün kontrolü).

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()); 
     } 
    } 
} 
İlgili konular