字符串未被识别为有效的日期时间12

本文关键字:日期 时间 有效 识别 字符串 | 更新日期: 2023-09-27 18:05:14

在这里我绑定日期(从表)在下拉列表在这种格式2015,并希望填充网格视图中的数据时,网格视图中的日期等于下拉列表中的选定值。错误提示"字符串未被识别为有效的日期时间"。本行错误

 cmd.Parameters.AddWithValue("@eventDate", DateTime.Parse(ddlLocation.SelectedValue));

这是下拉列表代码

 SqlCommand cmd = new SqlCommand("SELECT DATEPART(yyyy, eventDate) AS eventDate FROM events group by eventDate", con);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dt);
        con.Close();
        ddlLocation.DataSource = dt;
        ddlLocation.DataTextField = "eventDate";
       ddlLocation.DataValueField = "eventDate";
        ddlLocation.DataBind();
        ddlLocation.Items.Insert(0, new ListItem("All", ""));

,这是网格视图代码:

 SqlCommand cmd = new SqlCommand("select id, eventDate, eventName from events where eventDate = @eventDate", con);
     cmd.Parameters.AddWithValue("@eventDate", DateTime.Parse(ddlLocation.SelectedValue));
     SqlDataAdapter da = new SqlDataAdapter(cmd);
     da.Fill(dt);
     }
     else
     {
     SqlCommand cmd = new SqlCommand("select id, eventDate, eventName from events", con);
     SqlDataAdapter da = new SqlDataAdapter(cmd);
     da.Fill(dt);
     }
      con.Close();
     gvDetails.DataSource = dt;
     gvDetails.DataBind();
   }

字符串未被识别为有效的日期时间12

既然Adam已经回答了这个问题,请允许我解释一下如何在代码中使用它:

正如Adam所解释的,你输入的ddlLocation.SelectedValue格式不正确。您需要做的是首先将该值设置为一个完整的日期。你可以这样做:

cmd.Parameters.AddWithValue("@eventDate", DateTime.Parse("1/1/" + ddlLocation.SelectedValue));

通过将"1/1/"添加到您的值中,这将使您的ddlLocation.SelectedValue = "1/1/2015" (有效的输入DateTime.Parse方法。

之后,当你需要访问这个日期时,你可以使用Adam的建议

var result = DateTime.Parse("1/1/2015").Year;
//result = 15

DateTime存储一个完整的值。你不能马上在DateTime中存储一年的时间。您最好存储整个日期,然后将年份解析为stringint。在后端进行适当的修改,或者在前端将其强制转换为字符串或int。

我想解决这个问题的方法是在前端,从用户那里获取以下内容,dtb从这个问题

var result = DateTime.Parse("05/11/2010").Year;
//result = 10

您可以尝试如下操作:

string Text="22/11/2009";
DateTime date = DateTime.ParseExact(Text, "dd/MM/yyyy", null);              
Console.WriteLine("update date => "+date.ToString("yyyy-MM-dd"));