我如何像数字一样计算时间

时间:2012-02-03 22:11:46

标签: c# sql time

大家好,我正在C#上做一个应用程序,现在我有一个疑问。

我需要代表相对时间,例如我有02:30:00我需要说是2.5小时。

我怎么能这样做,而且我需要在这里使用2位小数是我到目前为止所做的,但我给了我时间跨度的错误

private string Horas_Matutinas(string cedula, DateTime desde, DateTime hasta)
    {
        string respuesta = "";
        DateTime resto = Convert.ToDateTime("00:00:00");
        //Llamo la conexion SQL
        SqlConnection Wdcon_usuario = new SqlConnection(WDcon);
        SqlCommand usuario = new SqlCommand();
        SqlDataReader usuarioDR = null;
        TimeSpan tiempo = Convert.ToDateTime("00:00:00") - Convert.ToDateTime("00:00:00");
        //Instancio la conexion SQL
        usuario.Connection = Wdcon_usuario;

        //Registro el Query SQL
        usuario.CommandText = "SELECT * FROM matutino WHERE " +
        "(cedula = @ID) AND " +
        "(desde >= @DESDE) AND " +
        "(hasta <= @HASTA)";
        usuario.Parameters.AddWithValue("@ID", Convert.ToInt64(cedula));
        usuario.Parameters.AddWithValue("@DESDE", Convert.ToDateTime(desde));
        usuario.Parameters.AddWithValue("@HASTA", Convert.ToDateTime(hasta));

        //Abro la conexion
        Wdcon_usuario.Open();

        //Ejecuto la consulta
        usuarioDR = usuario.ExecuteReader();

        //Empiezo el ciclo
        while (usuarioDR.Read())
        {
            TimeSpan tiempX = (DateTime)usuarioDR["tiempotrbajado"] - resto;
            tiempo = tiempo + tiempX;
            Double tiemp = Convert.ToDouble(tiempo);
            respuesta = tiempo.ToString("0.00");

        }
        //Cierro la conexion
        Wdcon_usuario.Close();
        //Termino la sentencia SQL

        //int i = 0;
        int total = 8;
        int caracteres = respuesta.Length;
        int restantes = total - caracteres;

        //respuesta.PadLeft(restantes, "0");


        string s = new String('0', restantes) + respuesta;
        return s;
    }

5 个答案:

答案 0 :(得分:1)

尝试替换此行

Double tiemp = Convert.ToDouble(tiempo);

有了这个

Double tiemp = tiempo.TotalHours;

Timespan.TotalHours将返回整个时间段和小时数,这是您想要的

答案 1 :(得分:1)

看起来你需要两次之间的差异,这个例子可能会帮助你。

DateTime now = DateTime.Now;
DateTime later = DateTime.Now.AddHours(2.5);
double diff = (later - now).TotalHours;
var x = String.Format("{0:0.00}", diff);

此外,您可以在不使用resto的情况下创建tiempoConvert。相反,您可以使用:

DateTime resto = DateTime.Now.Date;
TimeSpan tiempo = new TimeSpan();

答案 2 :(得分:0)

TimeSpan.TotalHours属性看起来像你想要的。它返回TimeSpan的总时间值,表示为整数和小时。然后你可以使用Math.Round()将这个值(它将是一个双倍)舍入到你可能需要的多个小数位,并使用ToString()的重载格式化它以获取CultureInfo或指定的格式字符串。

答案 3 :(得分:0)

您可能需要像这样获取TimeSpan: TimeSpan tiempX = (TimeSpan)((DateTime)usuarioDR["tiempotrbajado"] - resto);

然后使用标准TimeSpan格式字符串之一格式化结果: http://msdn.microsoft.com/en-us/library/ee372286.aspx

答案 4 :(得分:0)

您可以在SQL Server中执行此操作(我假设您使用的是SQL Server)...这是一个丑陋的示例,但您可以附加结果或只是转换它们:

  

SELECT SUBSTRING(CAST(CONVERT(TIME,GETDATE())AS char(20)),0,3)   AS Horas,CAST(SUBSTRING(CAST(CONVERT(TIME,GETDATE())AS   char(20)),4,2)AS float)/ 60 * 100 AS minutos

很多功能,但这就是想法。获取日期(我使用getDate(),您可以使用您的列)...将其转换为时间(在我的情况下'因为我不想要示例的日期)。将它转换为char,这样我们就可以将它子串起来得到几小时或几分钟,并且在几分钟内y转换为float来划分并获得关系(30 = .5)。

只是一个想法。