我目前允許用戶使用完整的圖案,像這樣設置其首選DateTime格式的日期模式:提取剛剛從一個完整的DateTime模式
var formats = System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat.GetAllDateTimePatterns('f').ToList();
formats.AddRange(System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat.GetAllDateTimePatterns('F'));
formats.AddRange(System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat.GetAllDateTimePatterns('g'));
formats.AddRange(System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat.GetAllDateTimePatterns('G'));
該生產全模式字符串是這樣的:
dddd, MMMM d, yyyy h:mm tt
dddd, MMMM d, yyyy hh:mm tt
dddd, MMMM d, yyyy H:mm
dddd, MMMM d, yyyy HH:mm
MMMM d, yyyy h:mm tt
dddd, d MMMM, yyyy h:mm:ss tt
M/d/yyyy h:mm tt
在UI中有一些地方我們不想顯示時間,因爲它在上下文中不相關。
有一種文化意識的BCL類,允許我從字符串中提取日期模式嗎?
實例API:基於@SteveWellens通訊
M/d/yyyy
更新:
var datePattern = System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat.GetDatePattern("M/d/yyyy h:mm tt");
這將導致datePattern被設置爲我意識到日期/時間模式本身並不是文化變體,這是拋棄我的東西。換句話說,無論最終用戶使用什麼樣的文化,代表小時佔位符的「h」總是「h」。我創建了一個死的簡單擴展方法來獲得我想要的。 (希望這並不一定是一個字符串的擴展,但因爲它雜波智能感知)
public static string GetDatePattern(this string pattern)
{
// set a default pattern if none is specified
if (string.IsNullOrWhiteSpace(pattern))
pattern = System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat.FullDateTimePattern;
var start = pattern.IndexOf("h", StringComparison.InvariantCultureIgnoreCase);
// cannot find the hour placeholder
if (start < 0)
return pattern;
return pattern.Substring(0, start -1);
}
注: 我仔細檢查了所有文化(CultureTypes.AllCultures)並且沒有standard date and time patterns開始與時間它們中的任何一個的模式,所以這是用於標準日期和時間模式的安全邏輯。自定義模式是一個完整的其他故事。
僅供參考,對於任何文化來說,最長的標準日期和時間模式爲48,以備將其保存到數據庫中。
你見過這個嗎? http://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx如果是這樣,我不明白這個問題。 –
當你說這個字符串是'文化意識'時,這是否意味着你可以使用適當的'CultureInfo'參數將字符串轉換爲DateTime?如果是這樣([link to technique](http://stackoverflow.com/questions/5590180/how-to-convert-a-datetime-string-to-a-current-culture-datetime-string)),那麼'd下面的''或'D'選項應該適合你。 – neontapir
我不這麼認爲。應該很容易做到這一點...找到第一個H或H,回到一個空間,你已經得到它。 –