WinRT Windows 8 RTM中的DateTime解析错误?

时间:2012-08-19 11:14:21

标签: c# datetime windows-8 windows-runtime .net-4.5

升级到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框架中有什么变化影响了这个吗?

2 个答案:

答案 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"之间的区别?