字符串未被识别为使用C#的有效日期时间

时间:2012-11-15 21:03:03

标签: c# asp.net

我已经在线尝试了所有可能的解决方案,但无法弄清楚为什么我仍然会收到此错误 “字符串未被识别为有效日期时间” 有趣的是,我正在转换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);

4 个答案:

答案 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);

参考:Custom Date and Time Format Strings

答案 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的值,以确保您正在拉正确的文本。