如何在C#中减去时间

时间:2012-01-22 16:20:21

标签: c#-4.0

我从数据库中取两个值作为字符串。现在我想减去这两个值。请帮助我,并提前感谢。

private void button3_Click_1(object sender, EventArgs e)
    {
        label4.Visible = true;
        textBox3.Visible = true;
        string condur = Properties.Settings.Default.DBConnectionString;
        SqlConnection connection = new SqlConnection(condur);
        string q1 = "select in_time from in_time where car_reg='" + comboBox1.Text + "' ";

        string q2 = "select out_time from out_time where car_reg='" + comboBox1.Text + "' ";
        SqlCommand command1 = new SqlCommand(q1, connection);
        SqlCommand command2 = new SqlCommand(q2, connection);
        try
        {
            connection.Open();
            string q3=command1.ExecuteNonQuery().ToString();

            string q4=command2.ExecuteNonQuery().ToString();



            DateTime dt1 = DateTime.Parse(q3);
            DateTime dt2 = DateTime.Parse(q4);
            TimeSpan result = dt2 - dt1; ;
            string result1 = result.ToString();
            textBox3.Text = result1;

            //MessageBox.Show("Insertion successful!");
            //textBox1.Text = ""; textBox2.Text = ""; textBox3.Text = ""; comboBox1.Text = ""; comboBox3.Text = ""; textBox11.Text = ""; textBox6.Text = ""; textBox8.Text = ""; textBox9.Text = ""; richTextBox1.Text = ""; textBox4.Text="";
        }
        catch (Exception exp)
        {
            throw exp;
        }
        finally
        {
            connection.Close();
        }

    }

1 个答案:

答案 0 :(得分:4)

看起来你回答了自己的问题:

    TimeSpan result = dt2 - dt1;

要在C#中减去两个DateTime值,只需使用减法运算符即可。如果您发布的代码示例有问题,您应该描述错误以及您预期会发生什么。

编辑以回应评论

该异常与减去日期无关,它与从字符串类型到 DateTime 。您正在尝试从字符串解析为DateTime:

    DateTime dt1 = DateTime.Parse(q3);

此操作失败,因为q3不代表有效字符串。原因是你(don't)查询的方式:

string q3=command1.ExecuteNonQuery().ToString();

ExecuteNonQuery不返回查询结果,而是返回已更改行的数量。换句话说,ExecuteNonQuery不是用于查询,而是用于更新方案等。

您可能需要使用ExecuteScalar,它会从查询中返回单个值。如果数据库中的类型正确,它将以DateTime的形式返回,因此您无需执行DateTime.Parse部分。代码的相关部分将变为:

DateTime q3 = (DateTime)command1.ExecuteScalar();
DateTime q4 = (DateTime)command2.ExecuteScalar();

TimeSpan result = q4-q3;

哦,顺便说一句,请在Google上查找“SQL注入”和“参数化查询”这两个术语。