【问题标题】:DateTime parse bug in WinRT Windows 8 RTM?WinRT Windows 8 RTM 中的 DateTime 解析错误?
【发布时间】:2012-08-19 11:14:20
【问题描述】:

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

【问题讨论】:

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


    【解决方案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);
    

    【讨论】:

    • 啊 - 大概是 RTM 中 en-GB 的默认短日期格式更改?
    • @pm_2 出于好奇,现在en-GB 中的ShortDatePattern 是什么
    • dd/MM/yyyy - 我必须承认,我以前从未真正检查过它,因为它正在工作:-)
    • 是不是你之前运行代码时运气好,所选文化和 CurrentCulture 恰好相同?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-17
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多