升级到Windows 8 RTM后,我的某些日期时间解析代码已停止工作。我使用标准控制台应用程序复制了这个:
CultureInfo provider;
provider = new CultureInfo("en-US");
string testDate = "1/1/2012";
DateTime date = DateTime.MinValue;
if (DateTime.TryParseExact(testDate,
CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern, // (dd/MM/yyyy)
provider,
DateTimeStyles.None,
out date))
Console.WriteLine("Date: {0}", date);
else
Console.WriteLine("Can't parse date: {0} / {1}", testDate, date);
Console.ReadLine();
输出:Can't parse date: 1/1/2012 ...
我也尝试过制作文化信息“eb-GB”(因为它对给定的格式没有任何影响)。 但是,如果我将输入日期更改为01/01/2012
,则可以正常使用。
.net 4.5 DateTime框架中有什么变化影响了这个吗?
答案 0 :(得分:1)
您需要更改ShortDatePattern
以使用所选提供商中的提供者而不是CurrentCulture
中的提供者。
DateTime date = DateTime.MinValue;
if (DateTime.TryParseExact(testDate,
provider.DateTimeFormat.ShortDatePattern, // Change this line
provider,
DateTimeStyles.None,
out date))
Console.WriteLine("Date: {0}", date);
else
Console.WriteLine("Can't parse date: {0} / {1}", testDate, date);
答案 1 :(得分:0)
您是否检查过您使用的ShortDatePattern
是否真的"dd/MM/yyyy"
?也许CurrentCulture
是你不期望的。
除此之外,如果您使用格式 "d/M/yyyy"
,"dd/MM/yyyy"
和DateTime
之间存在差异。也许DateTime
的解析现在变得更加严格,反映了"d/M/yyyy"
和"dd/MM/yyyy"
之间的区别?