我的系统短日期时间格式为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调试器没有捕获异常,所以我无法找到我应该尝试修复它的位置。
由于
答案 0 :(得分:1)
根据格式d/M/yyyy
,03/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;
}