1

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

4 回答 4

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

参考:自定义日期和时间格式字符串

于 2012-11-15T21:07:05.880 回答
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 日期格式确实是美国独有的。

于 2012-11-15T21:08:26.470 回答
0

看看这里的例子

http://msdn.microsoft.com/en-us/library/ey1cdcx8.aspx

http://msdn.microsoft.com/en-us/library/kc8s65zs.aspx

一个直接的字符串解析是自找麻烦。

于 2012-11-15T21:11:27.813 回答
0

您的 GridView 中是否有任何隐藏列?如果是这样,您的列索引可能会关闭,并且您可能会提取错误的数据。尝试在代码中的失败日期解析处设置断点并检查gr.Cells[7].Text立即窗口中的值,以确保提取正确的文本。

于 2012-11-15T21:39:25.410 回答