[英]C# DateTime.TryParse same format, different date
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
为什么它仅在某些日期有效? 显然,我同时在同一台计算机上运行了该代码。
我希望您正在使用的文化的长期格式可能只接受@VimalStan建议的完整月份名称(您是否已经确认了这两种方法?)。
它(IMHO)也应该接受您正在尝试做的事情,但是我知道各种文化都可能有这样的“怪癖”。 例如,“ mar”在某些文化中可能是模棱两可的? (虽然它在您的文化中可能不是模棱两可的……也许某些代码已经从一种文化中转移到另一种文化中了……我不知道文化规则是如何实施的,所以真的不知道这是否是甚至是有效的建议……但我认为特定文化可能并不总是表现出预期,这是公平的)。
使用http://msdn.microsoft.com/zh-cn/library/system.globalization.cultureinfo.currentculture.aspx来检查您的.NET上下文正在运行的区域性。您可以查看Windows用户配置文件在哪个上下文中运行通过控制面板(例如Win 7上的“区域和语言”),并查看那里的长日期格式。
您的示例在我的PC上工作正常,长日期格式为“ dddd,d MMMM yyyy”。 我在澳大利亚,使用en-au。
作为测试,请尝试使用en-au“英语(澳大利亚)”作为您的文化(通过控制面板,或根据上述currentculture
链接进行显式设置,位于“显式设置CurrentCulture属性”标题下),然后测试您的代码是否有效如预期的那样。
如果它能按预期工作,那么我认为这意味着问题是您的文化在解析方面比我的文化(例如,比您的预期要严格)更为严格。 因此,您可能需要确保通过整个月,或者使用TryParseExact()
根据此处的另一个答案指定自己的特定解析模式。
前几天,我遇到了同样的问题,这很令人沮丧,因为它没有必要失败。
但是我解决问题的方法是移动到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);
由于切换解析从未失败
尝试这个:
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}
: {3/28/2012 10:30:52 AM}
而且,当
String s = "Fri, 15 May 2009 20:10:57 GMT";
这将使: {5/15/2009 8:10:57 PM}
只是一个猜测,但是问题可能是意大利语中的“ Mar”是“Martedì”(星期二)一词的开头,因此“ Wed,2012 Mar 28,10:30:52 GMT”可能会被误解为类似“荒谬的“星期三Martedì/ Tuesday”。
作为反例,我在2013年寻找Martedì/ Tuesday 28,它可以代替星期几和月份:
2013年5月28日10:30:52 GMT => 2013年5月28日12.30.52
显然,使用其他语言环境无法正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.