0

在将 2 个字符串解析为 DateTime 时,我注意到了这种奇怪的行为。第一个字符串(导致异常)“20/10/2013 3:08:30 AM”第二个字符串(正确转换没有异常)“9/10/2013 3:09:37 AM”

用于转换的代码是:

string date_1 = "20/10/2013 3:08:30 AM";
string date_2 = "9/10/2013 3:09:37 AM"; 
try
{
DateTime d1 = DateTime.parse(date_1, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);   //throws exception (String was not recognized as a valid DateTime)
} catch (Exception ex) { throw ex; }
DateTime d2 =  DateTime.parse(date_2, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);

谁能解释一下为什么用相同格式表示完整日期的 2 个字符串会这样做?

谢谢大家。

4

2 回答 2

2

这将抛出,因为美国日期符号期望月份作为第一个字段:

string d = "20/10/2013 3:08:00 AM";
Console.WriteLine(DateTime.Parse(d, new CultureInfo("en-US")));

不变文化也是如此。

这将起作用:

DateTime.Parse(d, new CultureInfo("nl-NL"))
于 2013-10-21T06:19:42.827 回答
0

解析日期时需要指定文化。如果您的计算机位置设置对于您所在的地区是正确的,日期也是正确的,那么您可以简单地使用当前的文化进行解析。

例如

string date = "20/10/2013 3:08:00 AM";    
Console.WriteLine(DateTime.Parse(date, CultureInfo.CurrentUICulture));

或者简单地说:

string date = "20/10/2013 3:08:00 AM";    
Console.WriteLine(DateTime.Parse(date));

这在澳大利亚对我有用,但是如果您的区域设置是针对美国的,那么您需要指定您希望日期格式的文化。例如

string date = "20/10/2013 3:08:00 AM";    
Console.WriteLine(DateTime.Parse(date, new CurrentUICulture("en-AU")); //en-GB, etc

话虽如此,DateTime.TryParse如果您预计日期格式不正确,使用它会更快(也许更安全)。

于 2013-10-21T06:33:07.703 回答