簡體   English   中英

為什么DateTime.ParseExact會因CultureInfo.CurrentCulture失敗?

[英]Why would DateTime.ParseExact fail with CultureInfo.CurrentCulture?

我正在嘗試用給定的格式解析日期,我發現了這個我無法解釋的:

var date = new DateTime(2001, 01, 10);

var cultureInfo1 = CultureInfo.GetCultureInfo(CultureInfo.CurrentCulture.Name);
var cultureInfo2 = new CultureInfo(CultureInfo.CurrentCulture.Name);

Assert.AreEqual(date, DateTime.ParseExact("10/01/01", "dd/MM/yy", cultureInfo1));

Assert.Throws<FormatException>(() => DateTime.ParseExact("10/01/01", "dd/MM/yy", CultureInfo.CurrentCulture));
Assert.Throws<FormatException>(() => DateTime.ParseExact("10/01/01", "dd/MM/yy", cultureInfo2));

為什么此調用會因CurrentCulture失敗,使用文化名稱創建的新實例失敗但未使用GetCultureInfo()獲得的文檔失敗。 目前的文化是en-US,Windows配置了這兩個更改(在intl.cpl中完成):使用Metric系統和短日期格式'dd-MMM-yyyy'。

更新:

原始問題得到了正確回答,但我想補充一點,兩種文化都能夠解析日期。 問題似乎在於CultureInfo.DateTimeFormat.DateSeparator中指定的日期分隔符。

具有我的覆蓋的cultureInfo具有' - '作為分隔符,而原始文化具有'/'。

要使ParseExact解析日期而不考慮文化指定的分隔符,格式規范應從“dd / MM / yy”更改為“dd”/“MM”/“yy”

來自CultureInfo.GetCultureInfo(string)的MSDN CultureInfo.GetCultureInfo(string)

如果name是當前區域性的名稱,則返回的CultureInfo對象不會反映任何用戶覆蓋。

CultureInfo(string)的MSDN CultureInfo(string)

如果與name關聯的區域性標識符與當前Windows區域性的區域性標識符匹配,則此構造函數將創建使用這些格式的CultureInfo對象。

這意味着靜態GetCultureInfo(string)將不使用用戶已覆蓋的任何設置,而構造函數將使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM