2011-03-29 78 views
1

我的系统短日期时间格式为d/M/yyyy。我传递“2011年3月29日下午2点38分18秒”,所以它给错误“字符串未被识别为有效的DateTime”字符串未被识别为有效的日期时间 - 当字符串格式与系统日期时间格式不同时

DateTime.Parse("03/29/2011 02:38:18 PM") 

如果机器的日期时间格式设置到m/d/yyyy,它完美的工作。

编辑: 我的应用程序是一个winform应用,它包含一个数据gridview的,该网格视图包含一个自定义DateTime控制(列),这是由其他开发者创建。 当我尝试在网格中更改此日期时间列的值时,会发生此错误。 VS调试器不捕捉异常,所以我无法找到我应该尝试修复它的位置。

感谢

+0

我只看到约3,073。 – GWLlosa 2011-03-29 21:46:04

回答

1

按照格式d/M/yyyy03/29/2011将达到每月29号,它显然是不存在的。

其他格式的日和月切换,然后字符串表示29.三月这是一个完全有效的日期。

+0

我知道,但应该有办法解决这个问题。 – Sharique 2011-03-29 12:59:31

+0

@Sharique - 处理它的方法是使用ParseExact。在那里你可以给字符串解析**和**格式。这是解决方案,因为字符串总是包含我必须添加的相同格式的日期和时间。 – 2011-03-29 13:01:49

0

是的,嗯,DateTime.Parse函数使用系统格式来解析日期,除非您提供FormatProvider。很明显,在d/m/yyyy的情况下不存在第29个月,因此解析失败

1

MSDN

重要的,因为解析(字符串) 方法试图解析的日期和使用该 当前区域性的格式规则时间 的字符串 表示,试图解析一个 跨越不同 文化的特定字符串可能会失败或返回 不同的结果。如果一个特定的日期和 时间格式将跨越 不同的区域设置进行解析,使用 DateTime.Parse(字符串, 的IFormatProvider)方法或ParseExact方法的 重载之一和 提供一个格式说明。

0

使用DateTime.ParseExact从字符串日期时间解析

例子:

DateTime.ParseExact("2001-01-01", "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture); 
0

你可以尝试改变文化信息,让您输入系统的格式相匹配。

因此,请尝试添加到网络中。配置:

<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-US" /> 
0

您可以在这里找到答案:String was not recognized as a valid DateTime " format dd/MM/yyyy"

您可以分析与相应的CultureInfo,它定义了日期格式和日期部分的顺序的日期(月,日,年)或(日,月,年)。

或者您可以使用ParseExact并为其提供格式化字符串,如上面的答案中所述。

0

请参阅 “convert Different formate of DateTime to specific String format in c#

private DateTime ConvertToDateTime(string strDateTime) 
{ 
DateTime dtFinaldate; string sDateTime; 
try { dtFinaldate = Convert.ToDateTime(strDateTime); } 
catch (Exception e) 
{ 
string[] sDate = strDateTime.Split('/'); 
sDateTime = sDate[1] + '/' + sDate[0] + '/' + sDate[2]; 
dtFinaldate = Convert.ToDateTime(sDateTime); 
} 
return dtFinaldate; 
}