2009-07-16 27 views
8

我正在修改爲每個登錄用戶使用存儲的CultureInfo的全球化Web應用程序。CultureInfo&DateTimeInfo:如何檢查是否是24小時制?

客戶想時間數據錄入進行本地化。由於格式已經存在,顯示不成問題。不過,我需要檢測當前的cultureinfo是24小時制還是上午/下午制,因此我可以顯示正確的輸入框(而不僅僅是一個文本框)。

我最初的想法是要檢查的CultureInfo的DateTimeInfo財產,看看ShortTimePattern包含一個大寫的H或更低的方案H但這絲毫沒有感覺到強大的足以讓我。

有沒有更好的方法?我讀過這兩個類的屬性,但除非我錯過了某些東西,否則我看不到任何現有的方法或屬性。

+0

謝謝@mlessard - 檢查的轉義字符是一個好主意。我可能不會在現階段這樣做,因爲我們不使用自定義文化,這都是非常簡單的事情。 – toxaq 2009-07-16 02:38:59

+0

這是我用來作爲擴展方法創建此功能的代碼: using System;使用System.Globalization的 ; 命名空間My.Extensions { 公共靜態類CultureInfoExtensions { 公共靜態布爾Is24HourTime(這CultureInfo的文化) { 回報culture.DateTimeFormat.ShortTimePattern.Contains( 「H」); } } } – toxaq 2009-07-16 02:39:59

回答

7

我不認爲這是一個更好的方式來獲得這些信息。對於文化的時間模式可以包含任何內容(用戶甚至可以創建自定義的文化,其中ShortTimePattern是「\你好」,然後DateTime.ToString()將返回「你好」的任何時間)。在這種情況下,框架如何確定CultureInfo是24小時制還是12小時制?

因此,一個「正常」 DateTimeFormatInfo.ShortTimePattern必定包含一個「H」或「H」,否則小時將不被顯示。我認爲你可以按照你的初步想法,並檢查。您也可以檢查'h'或'H'是否不會像\「hello」例子那樣被轉義,因爲那不代表小時:)

2

檢查'H'/'h'似乎比檢查AM/PM指示符更穩健。 一個很好的例子是en-gb: 時間格式字符串是HH:mm,並且AM/PM指示符被設置爲AM/PM Windows將以24h格式顯示時間! 這似乎是一個不一致的定義,但檢查'H'修復了我的錯誤。

相關問題