我已经在线尝试了所有可能的解决方案,但无法弄清楚为什么我仍然会收到此错误
“字符串未被识别为有效日期时间”
有趣的是,我正在转换2个日期时间,一个是我的gridview中的单元格3,另一个是单元格7,但单元格3工作正常,但单元格7不想转换,它们都是相同的数据类型!!。我从我的sql server表中提取这些数据,数据类型是varchar,但格式应为mm / dd / yyyy。
我尝试过这种方法,但它不起作用:
foreach (GridViewRow gr in GridView1.Rows)
{
CheckBox cb = (CheckBox)gr.FindControl("chkItem");
if (cb.Checked)
{
DateTime ExpectedSubDate = DateTime.Parse(gr.Cells[3].Text);
DateTime strTargetDate = DateTime.ParseExact(gr.Cells[7].Text, "MM/DD/YYYY HH:MM:SS TT", System.Globalization.CultureInfo.InvariantCulture);
我也尝试过这种方法,但是无法正常工作
DateTime strTargetDate = DateTime.Parse(gr.Cells[7].Text);
我也尝试过这种方式,但也没有效果:
DateTime strTargetDate = DateTime.ParseExact(gr.Cells[7].Text, "MM/DD/YYYY", System.Globalization.CultureInfo.InvariantCulture);
答案 0 :(得分:4)
格式字符串是大小写的,否则无法知道您希望它在几个月或几分钟内解析的位置。
对于日期和时间,例如"11/15/2012 02:26:35 PM"
:
DateTime strTargetDate = DateTime.ParseExact(gr.Cells[7].Text, "MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture);
仅限日期,例如"11/15/2012"
:
DateTime strTargetDate = DateTime.ParseExact(gr.Cells[7].Text, "MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture);
答案 1 :(得分:1)
您的格式字符串不正确。格式字符串区分大小写。
mm =分钟
dd =天
数
MM =月份
yyyy =年
应该是这样的:
CultureInfo usa = CultureInfo.GetCultureInfo("en-US");
DateTime strTargetDate = DateTime.ParseExact(gr.Cells[7].Text, "MM/dd/yyyy", usa );
您仍然可以使用InvariantCulture,但mm / dd / yyyy日期格式确实是美国独有的。
答案 2 :(得分:0)
看看这里的例子
http://msdn.microsoft.com/en-us/library/ey1cdcx8.aspx
http://msdn.microsoft.com/en-us/library/kc8s65zs.aspx
一个直接的字符串解析就是在寻找麻烦。
答案 3 :(得分:0)
您的GridView中是否有任何隐藏的列?如果是这样,您的列索引可能会关闭,您可能会提取错误的数据。尝试在代码中的失败日期解析时设置断点,并在立即窗口中检查gr.Cells[7].Text
的值,以确保您正在拉正确的文本。