当字符串格式与系统日期时间格式不同时,字符串未被识别为有效的DateTime

时间:2011-03-29 12:51:25

标签: c# winforms datetime datagridview

我的系统短日期时间格式为d / M / yyyy。我正在通过“03/29/2011 02:38:18 PM”,所以它给出错误“字符串未被识别为有效的DateTime”

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

如果机器的日期时间格式设置为m / d / yyyy,则效果非常好。

修改 我的应用程序是一个winform应用程序,它包含一个数据gridview,这个网格视图包含一个自定义DateTime控件(列),由其他开发人员创建。 当我尝试更改网格中此datetime列的值时,会发生此错误。 VS调试器没有捕获异常,所以我无法找到我应该尝试修复它的位置。

由于

8 个答案:

答案 0 :(得分:1)

根据格式d/M/yyyy03/29/2011相当于29号月份显然不存在。

另一种格式有日期和月份切换,然后字符串代表29. March,这是一个完全有效的日期。

答案 1 :(得分:1)

来自MSDN

  

重要因为Parse(String)   方法尝试解析字符串   表示日期和时间   使用的格式规则   当前的文化,试图解析一个   不同的特殊字符串   文化可能会失败或返回   不同的结果。如果是具体日期   和时间格式将被解析   不同的语言环境,使用   DateTime.Parse(字符串,   IFormatProvider)方法或其中之一   ParseExact方法的重载和   提供格式说明符。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

请改用DateTime.ParseExact()。如果通过传入正确的FormatString知道字符串进入函数的内容,您可以准确指定如何解析日期。如果标准日期时间格式字符串不起作用,则可以使用custom DateTime Format String

答案 4 :(得分:0)

使用DateTime.ParseExact从字符串

解析日期时间

示例:

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

答案 5 :(得分:0)

您可以尝试更改文化信息,以便输入与系统格式相匹配。

所以尝试在web.config中添加它:

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

答案 6 :(得分:0)

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

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

或者你可以使用ParseExact并给它一个格式字符串,如上面的答案所述。

答案 7 :(得分: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;
}