gpt4 book ai didi

c# - C#计算时间差并保存到mysql

转载 作者:行者123 更新时间:2023-11-28 23:10:42 27 4
gpt4 key购买 nike

我被分配了计算仅计算工作时间的时差的任务。搜索后我得到了这个(它有点葡萄牙语,但我认为它是可以理解的):

    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 小时而不是“48:00:00”时,它试图将它更新为“2.00:00:00”,这是无效的,因为“tempo”是一个时间字段在 MySQL 中。我真的不知道如何解决它,到目前为止,我已经尝试将“horas”设置为日期时间,然后将其格式化为正确的格式,但没有成功。

非常感谢任何帮助,如果难以理解,我很抱歉,尽管提问,我会尝试进一步解释。

编辑:

将包含小时数的 float “horas”添加到时间跨度中:

TimeSpan tempo = TimeSpan.FromHours(horas); 

最佳答案

时间差异的标准 SQL 数据类型是“间隔”。 MySQL 不支持“间隔”数据类型。

这可能会造成混淆,因为时间和间隔使用相同的表示法,但具有不同的含义。如果是一天中的某个时间(“时间”或“时间戳”),值“1:00”表示 1 点钟。但如果是间隔,则相同的值表示一小时。

此外,“48:00:00”是一个有效间隔(48 小时),但它不是一天中的有效时间。

如果您使用的是 MySQL,请计算间隔并将其存储为表示小时数、分钟数或秒数的整数以及显示格式。例如,将两个小时存储为整数 7200(秒)或整数 120(分钟),具体取决于应用程序的要求。将该整数格式化为“2:00”以供显示。 C# 的 TimeSpan.FromMinutesTimeSpan.FromSeconds 会有所帮助。

如果您想使用支持间隔的开源 dbms,请查看 PostgreSQL。

关于c# - C#计算时间差并保存到mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46061862/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com