2
DateTime res;
String s;

s = "Wed, 28 Mar 2012 10:30:52 GMT";
DateTime.TryParse(s, out res);
Console.WriteLine(s + " => " + res);

s = "Fri, 15 May 2009 20:10:57 GMT";
DateTime.TryParse(s, out res);
Console.WriteLine(s + " => " + res);

输出:

Wed, 28 Mar 2012 10:30:52 GMT => 01/01/0001 00.00.00
Fri, 15 May 2009 20:10:57 GMT => 15/05/2009 22.10.57

为什么它只适用于某些日期?显然,我同时在同一台机器上运行了该代码。

4

4 回答 4

2

我希望您所使用的文化的长日期格式可能只接受@VimalStan 建议的完整月份名称(您是否已经确认了这一点?)。

应该(恕我直言)也接受你正在尝试做的事情,但我知道各种文化都可能有这样的“怪癖”。例如,也许“mar”在某些文化中是模棱两可的?(虽然它在您的文化中可能并不模棱两可......也许一些代码已经从一种文化传播到另一种文化......我不知道文化规则是如何实施的,所以不知道这是否是即使是一个有效的建议......但我认为特定文化可能并不总是按预期表现是公平的)。

使用http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.currentculture.aspx检查您的 .NET 上下文在哪个文化中运行。您可以查看 Windows 用户配置文件在哪个上下文中运行通过控制面板(例如 Win 7 上的“区域和语言”),并查看那里的长日期格式。

您的示例在我的电脑上运行良好,其中长日期格式为“dddd,d MMMM yyyy”。我在澳大利亚,使用 en-au。

作为测试,请尝试使用 en-au "English (Australia) 作为您的文化(通过控制面板,或根据上述currentculture链接在“显式设置 CurrentCulture 属性”标题中显式设置,然后测试您的代码是否像预期的。

如果它按预期工作,我认为这意味着问题只是您的文化在解析方面比我的文化更严格(例如,比您预期的)。因此,您可能需要确保通过整月,或者根据此处使用的另一个答案指定您自己的特定解析模式TryParseExact()

于 2013-03-29T08:17:51.933 回答
1

前几天我遇到了同样的问题,这非常令人沮丧,因为它没有必要失败。

但是我解决问题的方法是转移到DateTime.TryParseExact

使用如下:

// Parse date with no style flags.
dateString = " 5/01/2009 8:30 AM";
if (DateTime.TryParseExact(dateString, "g", enUS, 
                          DateTimeStyles.None, out dateValue))
   Console.WriteLine("Converted '{0}' to {1} ({2}).", 
                             dateString, 
                              dateValue, 
                             dateValue.Kind);
else
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

由于切换解析从未失败

于 2013-03-29T08:07:06.857 回答
1

试试这个:

DateTime res;
String s = "Wed, 28 Mar 2012 10:30:52 GMT";
DateTime.TryParseExact(s, "R", CultureInfo.InvariantCulture, DateTimeStyles.None, out res);

这将给出:{3/28/2012 10:30:52 AM}

还有,当

String s = "Fri, 15 May 2009 20:10:57 GMT";

这将给出:{5/15/2009 8:10:57 PM}

于 2013-03-29T08:33:51.127 回答
0

这只是一个猜测,但也许问题在于意大利语中的“Mar”是“Martedì”(星期二)这个词的开头,所以“Wed, 28 Mar 2012 10:30:52 GMT”可能会被误解为“周三Martedì/Tuesday”,这是荒谬的。

作为一个反例,我在 2013 年寻找了 Martedì/Tuesday 28,它可以用月份代替星期几:

2013 年 3 月 28 日 10:30:52 GMT => 28/05/2013 12.30.52

显然它不能使用其他语言环境。

于 2013-03-29T08:30:19.527 回答