2009-07-16 25 views
8

Oturum açmış her kullanıcı için depolanmış CultureInfo'yi kullanan küreselleştirilmiş bir web uygulamasını değiştiriyorum.CultureInfo & DateTimeInfo: 24 saat olup olmadığını nasıl kontrol edebilirim?

İstemci, zaman veri girişinin yerelleştirilmesini ister. Biçimlendirme zaten mevcut olduğundan görüntüleme sorun değil. Bununla birlikte, şu anki cultureinfo'nun 24 saat süre mi yoksa saat/gün mi olduğunu tespit etmem gerekiyor, bu yüzden doğru giriş kutularını (sadece bir metin alanı değil) görüntüleyebilirim.

İlk düşüncem CultureInfo'nın DateTimeInfo özelliğini kontrol etmek ve ShortTimePattern'in bir sermaye H mi yoksa küçük harf h içerip içermediğini görmek oldu, ancak bu bana yeterince güçlü gelmiyordu.

Daha iyi bir yolu var mı? Her ikisinin sınıf özelliklerini okudum ama bir şeyleri kaçırmadığım sürece, mevcut herhangi bir yöntemi veya özelliği göremiyorum.

+0

Teşekkürler @mlessard - Kaçan bir karakteri kontrol etmek iyi bir fikirdir. Muhtemelen bu aşamada özel kültürler kullanmadığımız için yapmayacağım, her şey çok basit. – toxaq

+0

Bu işlev, bir uzantı yöntemi olarak bu işlevselliği oluşturmak için kullandığım kod: Sistem kullanılarak ; System.Globalization kullanarak ; ad My.Extensions { halka statik sınıf CultureInfoExtensions { ortak statik BOOL Is24HourTime (bu CultureInfo kültür) { dönüş culture.DateTimeFormat.ShortTimePattern.Contains ("H"); } } – toxaq

cevap

7

Bu bilgiyi elde etmenin daha iyi bir yolu olduğunu sanmıyorum. Bir kültür için zaman modeli herhangi bir şey içerebilir (bir kullanıcı ShortTimePattern'in "\ merhaba" olduğu bir özel kültürü bile oluşturabilir ve daha sonra DateTime.ToString() "herhangi bir zaman için" merhaba "anlamına gelir). Bu durumda, CultureInfo'nun 24 saat mi yoksa 12 saat formatında mı olduğunu nasıl belirleyebiliriz? Bu nedenle, bir "normal" DateTimeFormatInfo.ShortTimePattern, mutlaka bir "h" veya bir "H" içerecektir, aksi takdirde saat gösterilmeyecektir. Bence ilk fikrini takip edebilir ve kontrol edebilirsin. Ayrıca "h" veya "H" nin "\ hello" örneğimdeki bir \ 'ile kaçmadığını da kontrol edebilirsiniz çünkü bu, saati temsil etmeyecektir :)

5

En sağlam yol, DateTimeFormatInfo.AMDesignator olup olmadığını kontrol etmektir. boş bir dize. 'H'/'h' kontrol ediliyor

if (DateTimeFormatInfo.AMDesignator == "") 
    //24hour format 
else 
    //12hour format 
+0

'DateTimeFormatInfo.CurrentInfo.AMDesignator' ancak tam olarak ihtiyacım olan şey – Anytoe

2

AM/PM Designator kontrol etmekten daha sağlam görünüyor. İyi bir örnek en-gb: Saat biçimi dizesi HH: mm'dir ve AM/PM tanımlayıcıları AM/PM olarak ayarlanmıştır Windows saati 24 saat biçiminde gösterir! Bu tutarsız bir tanım gibi görünüyor, ancak 'H' seçeneğinin kontrol edilmesi hatayı düzeltti.

İlgili konular