计算C#中的时差并保存到mysql

时间:2017-09-05 19:14:06

标签: c# mysql

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

    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); 

1 个答案:

答案 0 :(得分:0)

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

这可能令人困惑,因为时间和间隔时间使用相同的符号,但具有不同的含义。值'1:00'表示如果是一天中的时间(“时间”或“时间戳”),则为1点钟。但是如果是一个间隔,相同的值意味着一小时。

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

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

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