C# 我如何像数字一样计算时间
大家好,我正在C上做一个应用程序,现在我有一个疑问 我需要表示相对时间,例如我有02:30:00,我需要说是2,5小时 我该怎么做,我需要2位小数,这是我到目前为止所做的,但我给出了时间跨度的误差C# 我如何像数字一样计算时间,c#,sql,time,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.ToD
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;
}
试着换掉这条线
Double tiemp = Convert.ToDouble(tiempo);
用这个
Double tiemp = tiempo.TotalHours;
Timespan.TotalHours将返回Timespan的完整小时数和分数小时数,这是您想要的看起来您需要两个时间之间的差异,此示例可能会对您有所帮助
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();
TimeSpan.TotalHours属性看起来像您想要的。它返回TimeSpan的总时间值,表示为整小时和分数小时。然后,您可以对该值进行四舍五入,该值将是Math所需小数位数的两倍。四舍五入,并使用ToString重载对其进行格式化,该重载采用CultureInfo或指定的格式字符串。您可能需要这样获得时间跨度: TimeSpan tiempX=TimeSpandateTimeUsariodr[Tiemptrbajado]-resto 然后使用标准TimeSpan格式字符串之一格式化结果:
您可以在SQL Server中执行此操作我假设您正在使用SQL Server。。。这是一个丑陋的示例,但您可以附加结果或仅转换结果: 选择SUBSTRINGCASTCONVERTTIME,GETDATE作为字符20、0、3 作为horas,CASTSUBSTRINGCASTCONVERTTIME,GETDATE作为 字符20、4、2为浮动/60*100为分钟 很多功能,但这就是想法。获取日期我使用getDate,您可以使用您的列。。。在我的例子中,将其转换为时间,因为我不想要示例的日期。将它转换为char,这样我们就可以对它进行子串以获得小时或分钟,并在分钟内将y转换为float进行除法,得到关系30=.5
只是一个想法。您得到了什么异常?我使用了这个,但现在我在respuesta=tiempo.ToString0.00的行中得到了另一个错误;这是错误输入字符串的格式不正确。您需要在ToString方法可用的不同格式选项上检查这两个页面,并尝试只使用不带参数的ToString或只使用两个小数点的ToString。因此,您正在将总小时数存储在变量tiemp中,但您正在尝试提取字符串来自tiempo。尝试更改行respuesta=tiempo.ToString0.00;to respuesta=tiemp.ToStringF;