我被分配了计算时差的任务,仅计算工时。在搜索之后我能够得到这个(它有点用葡萄牙语,但我认为这是可以理解的):
if (!txt_data2.Text.Contains("_") && !string.IsNullOrEmpty(txt_data2.Text) && txt_data2.Text != null && !txt_hora2.Text.Contains("_") && !string.IsNullOrEmpty(txt_hora2.Text) && txt_hora2.Text != null)
{
TimeSpan hi = TimeSpan.Parse(txt_horainicio.Text);
TimeSpan hf = TimeSpan.Parse(txt_hora2.Text);
if (hi.Hours < 9 || hf.Hours > 18)
{
MessageBox.Show("Horas Inválidas");
}
else
{
if (MessageBox.Show("Inserir horas extraordinárias?", "Horas Extraordinárias", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
{
double extra;
TimeSpan horasextra;
Frm_Tempo frm1 = new Frm_Tempo();
if (frm1.ShowDialog() == DialogResult.OK)
{
horasextra = TimeSpan.Parse(frm1.txt_horasextra.Text);
extra = horasextra.TotalHours;
DateTime data1 = Convert.ToDateTime(txt_datainicio.Text);
TimeSpan hora1 = TimeSpan.Parse(txt_horainicio.Text);
DateTime dataentrega1 = Convert.ToDateTime(txt_data2.Text);
TimeSpan horaentrega1 = TimeSpan.Parse(txt_hora2.Text);
data1 = data1.Add(hora1);
dataentrega1 = dataentrega1.Add(horaentrega1);
double horas1 = 0;
double minutos1 = 0;
for (var i = data1; i < dataentrega1; i = i.AddMinutes(1))
{
if (i.DayOfWeek != DayOfWeek.Saturday && i.DayOfWeek != DayOfWeek.Sunday)
{
if (i.TimeOfDay.Hours >= 9 && i.TimeOfDay.Hours <= 18)
{
if (i.TimeOfDay.Hours >= 13 && i.TimeOfDay.Hours < 14)
{
}
else
{
minutos1++;
for (var x = data1; x < dataentrega1; x = x.AddHours(1))
{
horas1 = (minutos1 / 60) + extra;
}
}
}
}
}
TimeSpan tempo1 = TimeSpan.FromHours(horas1);
MySqlCommand UPDATE20 = new MySqlCommand("UPDATE tbl_orcamentos SET tempo ='" + tempo1 + "'WHERE id ='" + txt_cod.Text + "'", ligar);
UPDATE20.ExecuteNonQuery();
}
}
else
{
DateTime data = Convert.ToDateTime(txt_datainicio.Text);
TimeSpan hora = TimeSpan.Parse(txt_horainicio.Text);
DateTime dataentrega = Convert.ToDateTime(txt_data2.Text);
TimeSpan horaentrega = TimeSpan.Parse(txt_hora2.Text);
data = data.Add(hora);
dataentrega = dataentrega.Add(horaentrega);
float horas = 0;
float minutos = 0;
for (var i = data; i < dataentrega; i = i.AddMinutes(1))
{
if (i.DayOfWeek != DayOfWeek.Saturday && i.DayOfWeek != DayOfWeek.Sunday)
{
if (i.TimeOfDay.Hours >= 9 && i.TimeOfDay.Hours < 18)
{
if (i.TimeOfDay.Hours >= 13 && i.TimeOfDay.Hours < 14)
{
}
else
{
minutos++;
for (var x = data; x < dataentrega; x = x.AddHours(1))
{
horas = minutos / 60;
}
}
}
}
}
TimeSpan tempo = TimeSpan.FromHours(horas);
MySqlCommand UPDATE21 = new MySqlCommand("UPDATE tbl_orcamentos SET tempo ='" + tempo + "'WHERE id ='" + txt_cod.Text + "'", ligar);
UPDATE21.ExecuteNonQuery();
}
}
}
我正在使用c#和一个mysql数据库。
似乎有效,但当结果为48小时,而不是&#34; 48:00:00&#34;时,它会尝试将其更新为&#34; 2.00:00:00&#34 ;这不是有效的&#34;节奏&#34;它是mysql中的一个时间字段。我真的不知道如何解决它,到目前为止,我已经试图制作&#34; horas&#34;一个日期时间,然后将其格式化为正确的格式,但它没有工作。
我真的很感激任何帮助,如果难以理解,我很抱歉,只是问一下,我会尝试进一步解释。
编辑:
添加浮动&#34; horas&#34;其中包含Timespan的小时数:
TimeSpan tempo = TimeSpan.FromHours(horas);
答案 0 :(得分:0)
时间差的标准SQL数据类型是“interval”。 MySQL不支持“interval”数据类型。
这可能令人困惑,因为时间和间隔时间使用相同的符号,但具有不同的含义。值'1:00'表示如果是一天中的时间(“时间”或“时间戳”),则为1点钟。但是如果是一个间隔,相同的值意味着一小时。
另外,“48:00:00”是有效间隔(48小时),但不是一天中的有效时间。
如果您使用的是MySQL,请计算并存储一个整数,该整数表示小时,分钟或秒数,以及显示格式。例如,根据应用程序的要求,将整数7200(秒)或整数120(分钟)存储两个小时。将整数格式化为“2:00”进行显示。 C#的TimeSpan.FromMinutes
和TimeSpan.FromSeconds
会有所帮助。
如果您想使用支持间隔的开源dbms,请查看PostgreSQL。