大家好,我正在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;
}
答案 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
的情况下创建tiempo
和Convert
。相反,您可以使用:
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)。
只是一个想法。