2

升级到 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 框架中是否发生了影响这一点的变化?

4

2 回答 2

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);
于 2012-08-19T11:23:17.827 回答
0

你检查过ShortDatePattern你使用的是真的"dd/MM/yyyy"吗?也许CurrentCulture是你没想到的。

除此之外,"d/M/yyyy"如果"dd/MM/yyyy"您使用它们来格式化您的DateTime. 也许解析现在变得更加严格并反映了和DateTime之间的区别?"d/M/yyyy""dd/MM/yyyy"

于 2012-08-19T11:34:49.433 回答