字符串未被识别为有效的日期时间 [从日期时间中删除时间]

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

我正在从我的sql服务器中检索一个日期,即2016-01-06(年-月-日)到字符串中。sql 格式为日期。而不是只得到 2016-01-06,我将得到 1/6/2016/(月/日/年)上午 12:00:00 。现在我要做的是删除时间并将日期转换为 dd/M/yyyy 格式。我已经遵循了其他问题中的所有示例,但我会得到"字符串未被识别为有效的日期时间"我错过了任何步骤或我做错了。

 protected void btnUser_Click(object sender, EventArgs e)
        {
            {
                string Name = cmbName.Text;
                string start = "";
                SqlConnection myConn = new SqlConnection("Data Source=localhost;" + "Initial Catalog=IBBTS_DB; Integrated Security =SSPI");
                    SqlCommand retrieveStart_DateCmd = new SqlCommand("SELECT startDate FROM testSet where TS_ID = 121 ;", myConn);
                    SqlDataReader reader6 = retrieveStart_DateCmd.ExecuteReader();
                    while (reader6.Read())
                    {
                        start = (reader6.GetValue(0).ToString());
                    }
                    reader6.Close();  
                    DateTime dateTime = DateTime.ParseExact(start, "dd/MM/yyyy", CultureInfo.InvariantCulture);

             }
        }

字符串未被识别为有效的日期时间 [从日期时间中删除时间]

SQL

以 SQL 的标准格式存储datetime数据类型日期。但是,当您从 SQL 检索datetime数据类型时,datetime结果将转换为 C# 中的DateTime结构。

由于检索到的值是一个DateTime对象,因此您无需转换为字符串,然后将其解析出来。这样做会使检索该datetime的转换工作加倍。

试试这个例子。

protected void btnUser_Click(object sender, EventArgs e)
    {
        {
            string Name = cmbName.Text;
            DateTime start = default(DateTime);
            SqlConnection myConn = new SqlConnection("Data Source=localhost;" + "Initial Catalog=IBBTS_DB; Integrated Security =SSPI");
                SqlCommand retrieveStart_DateCmd = new SqlCommand("SELECT startDate FROM testSet where TS_ID = 121 ;", myConn);
                SqlDataReader reader6 = retrieveStart_DateCmd.ExecuteReader();
                while (reader6.Read())
                {
                    start = (DateTime)reader6[0];
                }
                reader6.Close();  
                string myFormattedString = start.ToString("dd/MM/yyyy");
         }
    }

既然你知道该字段将是一个日期,而且它只是一个字段,你能只使用 GetDateTime 吗?

DateTime dateTime = Reader6.GetDateTime(0)

这可能会让您跳过字符串转换。显然,如果可能的话,请先检查 dbNull。

避免使用ToString() - 你正在降低SQL Server发送给你的类型。 您应该能够使用 GetDateTime(0) 而不是 GateValue(0) 检索值。 这将使您能够更轻松地操纵值。

C# 不附带内置的 Date 类型,只有 DateTime . 因此,这就是呈现给您的内容。 获得DateTime后,您可以使用正常的格式化操作来根据需要对其进行格式化。

尝试按以下格式分配日期:

protected void btnUser_Click(object sender, EventArgs e)
{ 
        string Name = cmbName.Text, start = string.empty;
        SqlConnection myConn = new SqlConnection("Data Source=localhost;" + "Initial Catalog=IBBTS_DB; Integrated Security =SSPI");
        SqlCommand retrieveStart_DateCmd = new SqlCommand("SELECT startDate FROM testSet where TS_ID = 121 ;", myConn);
        SqlDataReader reader6 = retrieveStart_DateCmd.ExecuteReader();
        while (reader6.Read())
        {
              start = (reader6.GetValue(0).ToString());
        }
        reader6.Close();  
        DateTime dateTime = DateTime.ParseExact(start, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);//DateTime.ParseExact(start, "dd/MM/yyyy", CultureInfo.InvariantCulture); 
}

并在您的 Web.config 文件下添加此

<configuration>
    <system.web>
         <globalization culture="en-US" uiCulture="en-US" />
    </system.web>